




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录1关系映射11.1 单向关联11.1.1 一对一外键单向关联11.1.2 一对一主键单向关联41.1.3 一对多外键单向关联51.1.4 多对一外键单向关联81.2 双向关联101.2.1 一对一外键双向关联101.2.2 一对一主键双向关联121.2.3 一对多外键双向关联131.2.4 多对多双向关联15 1 关系映射1.1 单向关联1.1.1 一对一外键单向关联1、模型介绍一个人(Person)对应一个地址(Address)。2、实体(无getter和setter)Peronprivate Long oid;private String personid;private String name;private Address addressfk;Addressprivate Long oid;private String addressid;private String addressdetail;3、表模型以下是地址表表1 地址表以下是人物表,其中addressid是外键引用地址表的addressid表2 人物表4、映射文件Address.hbm.xmlPerson.hbm.xml5、测试方法public class Test public static void main(String args) Session s = HibernateUtil.getSession();try s.beginTransaction();Person p = new Person();p.setName(xuwei);p.setPersonid(200610801232);Address a = new Address();a.setAddressid(杨家冲6号);a.setAddressdetail(自贡市大安区);p.setAddressfk(a);s.save(a);s.save(p);s.getTransaction().commit(); catch (HibernateException e) e.printStackTrace();s.getTransaction().rollback(); finally s.close();6、测试结果a、s.save(a);s.save(p);正常保存b、s.save(p);s.save(a);异常发生,异常信息:not-null property references a null or transient valuec、s.save(a)能够插入,但信息不全,只插入一条记录。d、s.save(p)异常发生,异常信息:not-null property references a null or transient value 1.1.2 一对一主键单向关联1、要改的地方只有一个就是person.hbm.xmladdressfk2、测试结果a、s.save(a);s.save(p);正常保存,推荐方式,先插入父表,再插入子表b、s.save(p);s.save(a);正常保存,也是先插入父表,再插入子表c、s.save(a)能够插入,但信息不全,只插入一条记录。d、s.save(p)正常保存,而且插入两条记录。1.1.3 一对多外键单向关联1、模型介绍一个人(Person)对应多个地址(Address),比如家庭地址、公司地址。2、实体Addressprivate Long aid;private String addressid;private String addressdetail;Personprivate Long pid;private String personid;private String name;private Set addresses = new HashSet();3、表模型以下是地址表此表是多的一方pid为外键表3 地址表以下是人物表表4 人物表4、映射文件Address.hbm.xmlPerson.hbm.xml5、测试方法public class Test public static void main(String args) Session s = HibernateUtil.getSession();try s.beginTransaction();Person p = new Person();Address a1 = new Address();Address a2 = new Address();a1.setAddressid(杨家1号);a1.setAddressdetail(自贡市大安区);a2.setAddressid(杨家2号);a2.setAddressdetail(自贡市大安区);p.setName(xuwei);p.setPersonid(1);p.getAddresses().add(a1);p.getAddresses().add(a2);s.save(a1);s.save(a2);s.save(p);s.getTransaction().commit(); catch (HibernateException e) e.printStackTrace();s.getTransaction().rollback(); finally s.close();6、测试结果a、s.save(a1);s.save(a2); s.save(p);正常保存,信息:Hibernate: insert into address (addressid, addressdetail) values (?, ?)Hibernate: insert into address (addressid, addressdetail) values (?, ?)Hibernate: insert into person (personid, name) values (?, ?)Hibernate: update address set pid=? where aid=?Hibernate: update address set pid=? where aid=?b、s.save(p)正常保存,同上。c、s.save(a1);s.save(a2);正常保存,但信息不全:Hibernate: insert into address (addressid, addressdetail) values (?, ?)Hibernate: insert into address (addressid, addressdetail) values (?, ?)1.1.4 多对一外键单向关联1、模型介绍多个人(Person)对应一个地址(Address)。2、实体Addressprivate Long oid;private String addressid;private String addressdetail;Personprivate Long oid;private String personid;private String name;private Address addressfk;3、表模型以下是地址表表5 地址表以下是人物表,多个人对应一个地址:表6 人物表4、映射文件Person.hbm.xml5、测试方法Person p1 = new Person();Person p2 = new Person();Address a = new Address();p1.setName(xuwei);p1.setPersonid(001);p2.setName(weixu);p2.setPersonid(002);a.setAddressid(杨家1号);a.setAddressdetail(自贡市大安区);p1.setAddressfk(a);p2.setAddressfk(a);s.save(a);s.save(p1);s.save(p2);6、测试结果a、s.save(a); s.save(p1); s.save(p2);正常保存,信息为:Hibernate: insert into address (addressid, addressdetail) values (?, ?)Hibernate: insert into person (personid, name, addressid) values (?, ?, ?)Hibernate: insert into person (personid, name, addressid) values (?, ?, ?)b、s.save(p1); s.save(p2); s.save(a);正常保存,信息:Hibernate: insert into person (personid, name, addressid) values (?, ?, ?)Hibernate: insert into person (personid, name, addressid) values (?, ?, ?)Hibernate: insert into address (addressid, addressdetail) values (?, ?)Hibernate: update person set personid=?, name=?, addressid=? where pid=?Hibernate: update person set personid=?, name=?, addressid=? where pid=?c、s.save(p1); s.save(p2);发生异常,异常信息:Hibernate: insert into person (personid, name, addressid) values (?, ?, ?)Hibernate: insert into person (personid, name, addressid) values (?, ?, ?)org.hibernate.TransientObjectException: object references an unsaved transient instance1.2 双向关联1.2.1 一对一外键双向关联1、模型介绍同一对一单向关联2、实体Personprivate Long oid;private String name;private Address addressfk;Addressprivate Long oid;private String addressdetail;private Person personfk;3、表模型表7 address表表8 person表3、映射文件Address.hbm.xmlPerson.hbm.xml4、测试Person p = new Person();p.setName(xuwei);Address a = new Address();a.setAddressdetail(自贡市大安区);p.setAddressfk(a);a.setPersonfk(p);s.save(p);5、测试结果a、p.setAddressfk(a);a.setPersonfk(p);s.save(p);正常保存,信息如下:Hibernate: insert into person (name) values (?)Hibernate: insert into address (addressdetail, personid) values (?, ?)b、p.setAddressfk(a);a.setPersonfk(p);s.save(a);异常抛出,信息如下:not-null property references a null or transient value1.2.2 一对一主键双向关联1、需要改动的地方就是Address.hbm.xmlpersonfk1.2.3 一对多外键双向关联1、模型介绍一个人(Person)对于多个地址(Address)2、实体Addressprivate Long oid;private String addressdetail;private Person personfk;Personprivate Long oid;private String name;private Set addresses = new HashSet();3、表模型表9 address表表10 person表4、映射文件Address.hbm.xmlPerson.hbm.xml5、测试方法s.beginTransaction();Person p = new Person();Address a1 = new Address();Address a2 = new Address();a1.setAddressdetail(自贡市大安区);a2.setAddressdetail(自贡市大安区);p.setName(xuwei);p.getAddresses().add(a1);p.getAddresses().add(a2);a1.setPersonfk(p);a2.setPersonfk(p);s.save(p);s.saveOrUpdate(a1);s.saveOrUpdate(a2);s.getTransaction().commit();6、测试结果s.save(p);s.saveOrUpdate(a1);s.saveOrUpdate(a2);或者s.save(p);或者s.saveOrUpdate(a1);s.saveOrUpdate(a2);均能正常保存1.2.4 多对多双向关联1、模型介绍多个人(Person)对应多个地址(Address)。一个人可对应多个地址,一个地址也可以对应多个人。2、实体Addressprivate Long oid;private String addressdetail;private Set persons=new HashSet();Personprivate Long oid;private String name;private Set addresses = new HashSet();3、表模型表11 Address表表12 Person表表13 中间关系表4、映射文件Person.hbm.xmlAddress.hbm.xml5、测试方法s.beginTransaction();Person p1= new Person();Person p2= new Person();Address a1 = new Address();Address a2 = new Address();a1.setAddressdetail(自贡市大安区);a2.setAddressdetail(内江市威远县);p1.setName(xuwei);p2.setName(weixu);p1.getAdd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省2025年下半年海船船员适任考试和评估计划船舶结构与货运综合练习题及答案
- 慢性舌扁桃体炎合并吞咽困难护理查房
- 阿拉尔市2025-2026学年八年级下学期语文期末模拟试卷
- 安徽省亳州市涡阳县2023-2024学年高一上学期期末考试历史试卷及答案
- 社区街道消防课件
- 内科细节管理-推进护理服务
- 社区电动车安全知识培训课件
- 浙江省嘉兴市2024-2025学年高一上学期期末检测生物试卷(含答案)
- 贵州省贵阳市花溪区燕楼中学2024-2025学年七年级下学期6月质量监测数学试卷(含部分答案)
- 车间水暖安装合同范本
- 图纸保密协议范本
- 2.2算法的概念及其描述课件人教中图版高中信息技术必修1
- 出货管理实施手册标准版
- 2000立方米液化石油气球罐设计
- 心肺复苏术英文课件
- 绿色简历封面小升初通用学生个人简历自荐信Word模板
- 临床实践指南的制定与应用
- 米线加工坊管理制度
- 文化长廊、荣誉墙施工方案(技术方案)
- 【人教部编版语文五年级下册】全册课内阅读(附答案)共计30篇
- 自动喷水灭火系统调试记录
评论
0/150
提交评论