一对多关联映射(双向关联)见项目:me_one_to_many2

本文介绍了在Hibernate中实现一对多双向关联映射的方法。在一端使用<key>标签来创建外键,在多端使用<many-to-one>标签进行映射。inverse属性用于控制关联关系的维护方向。

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

一对多双向关联映射的方法:
在"一"一端:
在集合标签里面使用<key>标签来表明需要在对方的表中添加一个外键指向"一"一端。

<set name="users" order-by="name" cascade="all" inverse="true">
<key column="groupid"/>
<one-to-many class="com.dvnchina.hibernate.User"/>
</set>

 
在"多"一端:
使用<many-to-one>标签来映射。name值需同实体类中的属性名一致。
<many-to-one name="group" column="groupid"/>
需要注意:<key>标签所指定的外键字段名需要与<many-to-one>标签定义的外键字段名一致,否则便会造成引用数据的丢失!
如果从"一"一端来维护一对多双向关联的关系,hibernate会发出多余的update语句,所以一般地情况下,我们便会从多一端来维护其关联关系!
关于inverse属性:
inverse属性可以被设置到集合标签<set>上,表示在存储双向一对多关联映射的时候,存储的是那一方的关联引用。默认情况下,inverse=“false”,所以,我们可以从一多端或者多一端来维护两者之间的关系;如果我们设置inverse=“true”,则只能通过多一端来维护两者之间的关系。inverse属性可以被用在一对多和多对多双向关联中;
外键不需写进实体类中,写实体类时,"多"的一端写一个"一"的实体属性,"一"的一端写一个"多"的集合属性。注意:inverse属性只是在将数据持久化到数据库的过程中发挥作用.如:
User.java

public class User {
private int id;
private String name;
private Group group;
}

 
Group.java

public class Group {
private int id;
private String name;
private Set Users;
}

 
Cascade与inverse解析:
cascade:关联表的连锁反应。
inverse:关联关系的控制方向。
在一对多双向关联映射中,它们都是在"一"的一端的set标签中设置,如在group.hbm.xml中设置:

<set name="users" order-by="name" cascade="all" inverse="true">
<key column="groupid"/>
<one-to-many class="com.dvnchina.hibernate.User"/>
</set>

 
cascade="all":当"一"端save-update-delete时,若多端为瞬时对象时,先save-update-delete"多"端,而不需多端为持久对象,若没此设置,当一端save-update-delete时所关联的多端必须为持久对象,否则抛出TransientObjectException。
inverse="true" :由于只能在”一”一端配置inverse,所以”一”一端将控制关系给"多"的一端,只能通过多一端来维护两者之间的关系。
由于一对多双向关联映射是和单向一对多,多对一的结合,这里就不在写例子了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值