Hibernate多表关联及Hql查询

本文详细介绍了Hibernate中的四种关联映射:ManyToOne、OneToMany、OneToOne和ManyToMany,包括各自的属性设置如fetch类型和cascade操作。此外,还讲解了Hql查询的基本用法,包括占位符参数设置和不同类型的查询结果返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值