天天看点

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 <Object> 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<Student> getStudents() {

•return students;

•}

Hql查询教程

createQuery("书写Hql语句")

占位符setParameter(0,"666666")

List<object>---多条查询list()

Object--单条返回uniqueResult()

int --删除和修改executeUpdate()

继续阅读