hibernate关联_第1页
hibernate关联_第2页
hibernate关联_第3页
hibernate关联_第4页
hibernate关联_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hibernate的关联映射:数据对象间的关联关系有1:丄、1: m. 如以下4个类之间的关系如下:m这些类的实体之间存在级联Hibernate的关联映射关联关系有两个分类:(1)单向关系:只需单向访问关联端。单向N单向 单向单向NN(2)双向关系:关联的两端可以互相访问。双向*M 双向1-N 双向NNPersonjavapublic class Personprivate int personid; private String name; private int age;private Address address;public void setAddress(Address addre

2、ss)this.address = address; public Address getAddress() return this.address;Address.java public class Address/标识属性private int addressid;/地址详细信息private String addressdetail;Hibernate的关联映射丄、单向U关联一对一关联包括如下两种类型:主键关联和 惟一外键关联。(1)基于主键关联的单向11关系 关联的两个实体共享一个主键值。 基于主键关联的持久化类不能拥有自己的主 键生成策略,它的主键由关联类负责生成。采用vone-to

3、-one元素,并通过name 属性指定自身属性的属性名。Person.hbm.xml address Address.hbm.xml id name=lladdressid (2)基于主键关联的双向关系双向1 -1关联需要在单向关联-丄关系基础 上修改PO,使两边都具有互相访问的功能。public class Addressprivate int addressid; private String addressdetail; private Person person;此外,需要在Address.hbm.xml中增加 标记。如下: vaddresLidv Hibernate的关联映射(3)

4、基于外键关联的单向X:L关系两个实体各自有不同的主键,但其中有一个实体有一个外键引用了另一个实体的主键。基于外键关联的单向与单向关联1 多很相似,唯_不同的是Vir3nytoone元素需Person.hbm.xml truel class=Address11 column=lladdressIdll/ Address.hbm.xmlGBKll? class namesAddress1addressidl (4)基于外键关联的双向-1基于外键关联的双向-1需要在基于外键的单向关联1 -1基础上在不存在v m a nyo - one 元素的文件内添加v one-to-one元素,并使用name属性

5、指定自身关联的属性,而使用 property-refM性指定关联属性。Address.hbm.xml Hibernate的关联映射2、单向N7关联(1)无连接表的N-1关联使用 v many-to-one 元素。 元素常用属性: name:该属性的名字 column:指定进行关联的外键列的列名 class:关联实体的全限定类名 cascade:指定哪些操作会从主表记录级联到子表记录(2)有连接表的N-丄关联无连接表的Person.hbm.xml id name= PersonManager.javaprivate void testPerson()Session session = Hiber

6、nateUtil.currentSession(); Transaction tx = session.beginTransaction(); Person p = new Person();Address a = new AddressC广州天河”); p.setName(vYeekuv);p.setAge(29);p. set Ad dress (a ); session.persist(p);Address a2 = new AddressC上海虹口”); p.setAddress(a2);mit();HibernateUtil.closeSession();有连接表的Per

7、son.hbm.xmlclass name=flPerson1 generator class=llidentity/ agel, type=,lint/ lperson_addressl / / Hibernate的关联映射3.单向1N关联单向1 - N关联的持久化类里需要使用集合属 性,映射文件中使用vone-to-many元素, 并通过class属性指定关联实体的类型。对于单向1N关联,需要在1的一端增加 Set属性的set和g et方法。注意:(1) 必须指定 cascade=Mall, (2) 尽量少用单向-N关联,而是使用双向N关联。Person.javapublic class

8、Personprivate int personid; private String name;private int age;/1-N关联关系,使用Set来保存关联实体private Set addresses =new HashSet();public void setAddresses(Set addresses) this.addresses = addresses;public Set getAddresses()return this.addresses;Person.hbm.xml id name=R V!映射集合属性,集合元素是其他持久化实体 没有指定cascade属性!-指定

9、关联的外键列 PersonManager.javaprivate void testPerson()Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); Person p = new Person();Address a = new Addess(广州天河);/必须先持久化Address对象 session.persist(a);p.setNameCYeeku11); p.setAge(29);设置PersonlAddress之间的关联关系 p.getAddr

10、esses().add(a);session.save(p);Address a2 = new Address(n海虹口); session.persist(a2);修改持久化状态的Person对象p.getAddresses().add(a2); mit();HibernateUtil.closeSession();Hibernate的关联映射4、单向NN关联单向N - N关联和1 - N关联的持久化类代码完全相同,控制关系的一端需要增加一个Set集合 属性,被关联的持久化实例以集合形式存在。NN关联与有连接表的关联相似,只要去掉vmany-to-many 元素的 unique=

11、truer/BPnTomany-t oiriany元素的class属性指定 关联实体的类名。Person.hbm.xml lpersonidia V!映射集合属性,集合元素是其他持久化实体 指定连接表的表名“ !使用m any-to-many来映射1-N关联, 增加unique=”tRievl 引用到关联实体的 属性,1的一端增加集合属性vset,并使用 映射关联属性。注意:inverse=true/r用于指定N的一端 不控制关联关系。Person.javapublic class Personprivate int personid; private String name;/保留Perso

12、n的age属性 private int age;/l-N关联关系,使用Set来保存关联实体 private Set addresses =new HashSet();/address 巳 s 属性的 setter和getter 方法public void set Ad d resses ( Set addresses) this.addresses = addresses;public Set getAddresses()return this.addresses;Address.javapublic class Address/标识属性private int addressid; /地址详细

13、信息private String addressdetail;/保留关联实体的person属性private Person person;/person 属性的 setter 和 gette方汇 public void setPerson(Person person)this.person = person;public Person getPerson()return this.person;Person.hbm.xml class namesPersonlpersonid column=l,personid V!映射集合属性,集合元素是其他持久化实体 没有指定cascade属性 V!用以映

14、射到关联类属性- Address.hbm.xml hibernate-mapping package=lllee,V! Address持久化冕class name=11 Address1 id namesaddressid1 PersonManager.javaprivate void testPerson()Session session = HibernateUtil.currentSession(); Transaction tx = sessionbeginTRirisaction(); Person p = new Person(); p.setNameCYeeku1);p.setA

15、ge(29);/持久化Person对象(对应于插入主表记录) sessionsave(p);Address a = new Addess(广州天河);/先设置Person和Address之间的矣唉矣余 a.setPerson(p);/再持久化Address对象(对应于插入从表记录) session.persist(a);创建一入瞬态的A ddress对象Address a2 = new Address(上海虹口“);/先设置Person和Address之向的关联关系 a2.setPerson(p);/再持久化Address对象(对应于插入从表记录) session.persist(a2);tx

16、.commit();HibernateUtil.closeSession();Hibernate的关联映射6、双向NN关联双向N - N只能使用连接表来建立两个实体之间的关联关系。两端都使用Set集合来增加对集合属性的访问。增加Vnwriy-tomany元素来映射关联实体类。Person.javapublic class Person/标识属性private int personid; /Person 的 name 属性private String name;保留Person的age属性 private int age;/N-N关联关系,使用Set来保存关联实体 private Set add

17、resses=new HashSet();Address.java public class Address/标识属性private int addressid;/地址详细信息private String addrcssdetail;/N-N关联关系,使用Set来保存关联实体private Set persons =new HashSet();Person.hbm.xml lee V!映射集合属性,集合元素是其他持久化实体没有指定cascade属性 set name=addressesa inverse=aitrue tablesersonaddress,address_idll/ v/hib

18、ernate mBppingAddress.hbm.xml addressid1 column=,column_idi, laddressdetaill7 !-用以映射关联类属性 Hibernate的关联映射7、双向17关联 需要修改两边的持久化类,让两个持久化类 都增加引用关联实体的属性。(1)基于外键的双向11关联 外键可以存放在任意一边,需要存放外键的 一端需宴增加vmany-to-one元素弄设賣 unique=true,ro另一端需要使用v one-to-one A,并使用 name属性指定关联属性名。(2)基于主键的双向关联其中一端的主键生成器使用foreign策略。基于外键的双向关联Person.hbm.xmlhibernate-mapping package=lllee, address11 property ref=H person u/ /hibernate-mapping基于外键的双向关Address.hbm.xml id namesddressid1 使用many-to-one映射1 1关联实体uniquestrue1 确定为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论