- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hibernate关系映射2:双向1-N关联
Hibernate关系映射2:双向1-N关联
我最近在复习⼀下关于Hibernate关系映射的知识,看了书本的介绍以及视频。这⼏篇
客都是对学到知识的⼀点总结。当然,这些这是最基本的能够实现关联关系的配
置,在实际的使⽤中,还有很多参数需要根据情况来设置。但也算是对以后开发过程
中遇到遗忘的地⽅可以进⾏查阅。
在本⽂中使⽤的Demo也都已经上传到github 中,⾥边有详细的运⾏说明。Github地
址:HibernateRelationMapping
双向1-N关联
对于1-N关联,Hibernate推荐使⽤双向关联,⽽且不要让1的⼀端控制关联关系,⽽使
⽤N 的⼀端控制关联关系。
双向的N-1关联与1-N关联是完全相同的两种情形。两端都需要增加对关联属性的访
问,N 的⼀端增加引⽤到关联实体的属性,1的⼀端增加集合属性,集合元素为关联实
体。
域模型
从 Order 到 Customer 的多对⼀双向关联需要在Order 类中定义⼀个 Customer 属性, ⽽
在 Customer 类中需定义存放 Order 对象的集合属性
关系数据模型
ORDERS 表中的 CUS OMER_ID 参照 CUS OMER 表的主键
Notice
当Session从数据库中加载Java集合时,创建的是Hibernate 内置集合类的实例,因此,
在持久化类中定义集合属性时,必须把属性声明为Java接⼜
Hibernate的内置集合类具有集合代理功能,⽀持延迟检索策略
事实上,Hibernate的内置集合类封装了JDK 中的集合类,这使得Hibernate能够
对缓存中的集合对象进⾏脏检查,按照集合对象的状态来同步更新数据库。
在定义集合属性时,通常把它初始化为集合实现类的⼀个实例,这样可以提⾼程序的
健壮性,避免应⽤程序访问取值为null的集合的⽅法。
例如:private SetOrder orders = new HashSetOrder();
Demo
实体对象
public class Customer {
private Inte er customerId;
private Strin customerName;
private SetOrder orders = new HashSetOrder();
//省去 et和set
}
public class Order {
private Inte er orderId;
private Strin orderName;
private Customer customer;
//省去 et和set
}
Customer.hbm.xml
hibernate-mappin packa e=com.lihui.hibernate.double_n_1
class name=Customer table=CUSTOMERS
id name=customerId type=java.lan .Inte er
column name=CUSTOMER_ID /
enerator class=native /
/id
property name=customerName type=java.lan .Strin
column name=CUSTOMER_NAME /
/property
set name=orders inverse=true
key column=CUSTOMER_ID/key
one-to-many class=Order/
/set
/class
/hibernate-mappin
set
name属性: 设定待映射的持久化类的属性的
inverse 属性:
在hibernate 中通过对 inverse 属性的来决定是由双向关联的哪⼀⽅来维护表和表
之间的关系。 inverse = false 的为主动⽅,inverse = true 的为被动⽅, 由主动⽅
负责维护关联关系。在没有设置 inverse=true 的情况下,⽗⼦两边都维护⽗⼦关
文档评论(0)