Hibernate多表关联及Hql查询

ManyToOne   多对一关联(单向或双向)

OneToOne     一对一关联(单向或双向)

OneToMany   一对多关联(单向或双向)

ManyToMany  多对多关联(单向或双向)

 

@ManyToOne(fetch=FetchType,cascade=CascadeType ) 可选

@ManyToOne 表示一个多对一的映射 , 该注解标注的属性通常是数据库表的外键

optional: 是否允许该字段为 null, 该属性应该根据数据库表的外键约束来确定 , 默认为 true

fetch: 表示抓取策略 , 默认为 FetchType.EAGER

FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载,即从数据库读到内存

FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。也可以说成表示关联关系的从类在主类加载时同时加载

实例

    // 订单 Order 和用户 User 是一个 ManyToOne 的关系

    // 在 Order 类中定义

    @ManyToOne()

    @JoinColumn(name="USER")

    public User getUser() {

       return user;

    }

@JoinColumn@Column 类似 , 介量描述的不是一个简单字段 , 而一一个关联字段 , 例如 . 描述一个 @ManyToOne 的字段

@JoinColumn 描述的是一个关联字段 , ManyToOne, 则默认的名称由其关联的实体决定

OneToMany   一对多关联(单向或双向)

主表中属性@OneToMany(mappedBy="多的哪一方的属性名")
 

@OneToMany(mappedBy="多的哪一方的属性名")

List  list=new ArrayList();

从表中必须有ManyToOne   多对一关联(单向或双向)

 

OneToOne     一对一关联(单向或双向)

@OneToOne(fetch=FetchType,cascade=CascadeType)

可选

@OneToOne 描述一个一对一的关联

fetch: 表示抓取策略 , 默认为 FetchType.LAZY

cascade: 表示级联操作策略

示例 

    @OneToOne(fetch=FetchType.LAZY)

    public Blog getBlog() {

       return blog;

    }

 

ManyToMany  多对多关联(单向或双向)

@ManyToMany

可选

@ManyToMany 描述一个多对多的关联 . 多对多关联上是两个一对多关联 , 但是在 ManyToMany 描述中 , 中间表是由 ORM 框架自动处理

targetEntity: 表示多对多关联的另一个实体类的全名 , 例如 :package.Book.class

mappedBy: 表示多对多关联的另一个实体类的对应集合属性名称

示例 

    User 实体表示用户 ,Book 实体表示书籍 , 为了描述用户收藏的书籍 , 可以在 User Book 之间建立 ManyToMany 关联

@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)

@JoinTable(name = "Teacher_Student",

joinColumns = {@JoinColumn(name = "Teacher_ID")},

inverseJoinColumns = {@JoinColumn(name = "Student_ID")})

public Set getStudents() {

return students;

}

Hql查询教程

createQuery("书写Hql语句")
占位符setParameter(0,"666666")

List---多条查询list()
Object--单条返回uniqueResult()
int --删除和修改executeUpdate()

你可能感兴趣的:(Hibernate)