欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate多表关联及Hql查询

程序员文章站 2022-04-13 21:52:29
...

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()

相关标签: Hql Hibernate