设为首页 加入收藏

TOP

Hibernate关联关系的精髓总结
2014-11-24 13:55:55 来源: 作者: 【 】 浏览:2
Tags:Hibernate 关联 关系 精髓 总结

一 多对一 单向关联 (以Employee和Dempartment为例)


1.多对一 :一个部门可以有多个员工,一个员工只属于一个部门


2.多对一的分析


一个部门有多个员工,所以在建外键的时候选择的是在Employee的一方,即是多的一方,因为Hibernate的执行过程是先通过Configure去读取配置文件中的信息和数据库建立连接,根据配置文件的信息去找所对应的映射文件,映射文件的作用是把所建立的实体类映射为一个二维表,在映射成二维表的时候在Employee的映射中即在Employee.hbm.xml中设置一个员工所对应的部门,所使用的标签为:


"depart" column="depart_id" not-null="true" />


说明:标签简明思义为多对一,其中的属性name是在Employee中设置的Department类的对象,column是在数据库中外键的名字,not-null是不允许为空


在建立实体对象的时候,一的那一方(Dempartment),创建id,name等其他的普通属性,而在建立多的那一方的实体对象的时候,因为是多对一,所以要增加一个属性,为:


Dempartment depart;



二 一对多 单项关联 (以Dempartment和Employee为例)


1.一对多其实和多对一样的,只是所站的位置不同,所以会有不同的看法,如果是多对一,那么是一个部门有多个员工,因为是一对多,所以要在一的那一方,即是Dempartment中设置属性的时候要设置Employee对象,而Employee是多个,所以用集合存储起来,在建立实体类的时候,只需在Dempartment类中多写一个:


Set emps;


属性即可。


2.在写配置文件的时候,在Demparment.hbm.xml中只需写一个set标签即可:


"emps">



"depart_id"/>



"Employee" />



注:不管是多对一还是一对多,实体类所映射的数据库表中的结构是一样的,因为他们就是相同的,就是所站的角度不同而已



三 双向的多对一或一对多


双向的其实从字面的意思可以看出可以从多的一方查找一的一方,也可以从一的一方查找到多的一方,所对应的实体类是把前边两个的结合,映射文件也是



四 一对一(以Person和IdCard为例)


1.一对一是一个人只有一个身份证,而一个身份证只属于一个人,有了前边的经验,一对一的实体类的创建也就是在Person的类中多一个IdCard idCard;属性,在IdCard的类中多一个Person person;属性。


2.在Person.hbm.xml映射文件中是:


"idCard">


在IdCard.hbm.xml映射文件中是:


"person">



五 在测试类中的总结


在测试的时候一般为保存和查询的操作,分为以下几种情况:


(1)当是多对一或者是一对多的时候,保存的是向部门中插入的name,和员工中插入的name,员工因为是多个,所以可以插入多个员工,并且把员工设置到Dempartment的对象中,其中对重要的是:


employee1.setDepart(department);


这句话是把两张表建立起来的


(2)在查询的时候是调用session的get方法,利用反射就能得到所关联的对象,例如:


Person person = (Person) session.get(Person.class, personId);


通过调用Person对象person.getIdCard()方法得到IdCard()类


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Hibernate关联映射 --- 多对多实.. 下一篇Hibernate关联映射 --- 一对多实..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)