Hibernate 注册和联表查询

本文详细介绍了实体关系中一对一、一对多及多对多的关系映射方式,包括使用XML配置和注解两种方法,并对比了cascade与inverse的区别。

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

实体关系映射

一对一关联:1、主键关联    从表的主键同时是主表的外键,从表没有单独外键

2、外键关联  从表中存在外键列,关联主表的外键列。但外键列是不重复的。

级联操作(all,none,delete,save-update)当前对象执行某操作的情况下, 有关联的对象也执行cascade设置的相同操作

 

cascadeinverse的区别

cascade表示级联操作,当主表记录做操作时,从表记录做相应的操作,维护的是记录。

inverse表示控制反转,当该属性设置为true,表示由关联对象维护外键关系,当前对象不做外键维护,维护的是外键。一般来说,inverse设置在一方,外键由从表维护。

一对一:

<!-- name为属性名,class为该属性的类型,cascade表示当对主表对象操作时,从表对象是否做级联操作 -->

<one-to-one name="codeBean" class="com.joker.bean.CodeBean"cascade="all"></one-to-one>

<!-- constrained表示该主键存在外键约束,lazy=false表示取消延迟加载,查询该对象时,关联对象立即查询 -->

<one-to-one name="manBean" class="com.joker.bean.ManBean"constrained="true" lazy="false"></one-to-one>


 

一对一的从表主键如何配置:<id name="id" column="id">

<!-- 主键生成策略,foreign镖师该主键同时也是外键 -->

<generatorclass="foreign">

<!-- manBean为属性名,表示该主键ManBean对象的主键生成 -->

<paramname="property">manBean</param>

</generator>

</id>


<!-- 主表:配置一对多,指定集合存放元素的类型 -->

<setname="prodSet" inverse="true">

<keycolumn="factoryId"></key>

<one-to-many class="com.lovo.RoomBean" />

</set>

   <!--从表: 配置多对一,指定集合存放元素的类型 -->

<many-to-onename="user" class="com.lovo.bean.UserBean"

column="userId"lazy="false"></many-to-one>


多对多关系映射:

<!-- talbe为中间表表名 -->

<setname="gradeSet" table="t_role_grade">

<!-- 当前对象对应中间表的外键列名 -->

<keycolumn="roleId"></key>

<many-to-manyclass="com.lovo.bean.GradeBean"

column="gradeId"/>

</set>


注解注册:

一对一

@OneToOne(mappedBy="manBean",cascade=CascadeType.ALL)

mappedBy表示当前属性映射的从表对象的关联属性名,cascade表示是否做级联删除

@JoinColumn(name="manId",unique=true)

name为外键列名,unique表示唯一外键关联

一对多

@OneToMany(targetEntity=RoomBean.class)

targetentity指定集合中存放元素类型

@JoinColumn(name="userId")

指定外键列名

多对一

@ManyToOne(fetch=FetchType.EAGER)

fetch=FetchType.EAGER表示立即加载,查询从表记录时立即查询主表对象

@JoinColumn(name="userId")

指定外键列名

 

@ManyToMany(targetEntity=GradeBean.class)

 

@JoinTable(name="t_role_grade",joinColumns={@JoinColumn(name="roleId")},

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

指定中间表的表名,当前对象对应中间表的外键列名,集合中存放元素对应中间爱表的外键列名




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值