《Hibernate关系映射》由会员分享,可在线阅读,更多相关《Hibernate关系映射(26页珍藏版)》请在金锄头文库上搜索。
1、word目 录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和setterPeronprivate Long oid;private String personid;private Strin
2、g name;private Address addressfk;Addressprivate Long oid;private String addressid;private String addressdetail;3、表模型以下是地址表表1 地址表以下是人物表,其中addressid是外键引用地址表的addressid表2 人物表4、映射文件5、测试方法public class Test public static void main(String args) Session s = HibernateUtil.getSession();try s.beginTransaction()
3、;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().mit(); catch (HibernateException e) e.printStackTrace();s.getTransaction().rollback(); finally s.c
4、lose();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、要改的地方只有一个就是addressfk2、测试结果a、s.save(a);s.save(p);正常保存
5、,推荐方式,先插入父表,再插入子表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;pri
6、vate String name;private Set addresses = new HashSet();3、表模型以下是地址表此表是多的一方pid为外键表3 地址表以下是人物表表4 人物表4、映射文件5、测试方法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 Addr
7、ess();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().mit(); catch (HibernateException e) e.printStackTrace();s.g
8、etTransaction().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: u