加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Hibernate关联关系的精髓概括

发布时间:2021-11-24 19:03:40 所属栏目:教程 来源:互联网
导读:一 多对一 单向关联 (以Employee和Dempartment为例) 1.多对一 :一个部门可以有多个员工,一个员工只属于一个部门 2.多对一的分析 一个部门有多个员工,所以在建外键的时候选择的是在Employee的一方,即是多的一方,因为Hibernate的执行过程是先通过Conf

一  多对一  单向关联 (以Employee和Dempartment为例)
 
1.多对一 :一个部门可以有多个员工,一个员工只属于一个部门
 
2.多对一的分析
 
   一个部门有多个员工,所以在建外键的时候选择的是在Employee的一方,即是多的一方,因为Hibernate的执行过程是先通过Configure去读取配置文件中的信息和数据库建立连接,根据配置文件的信息去找所对应的映射文件,映射文件的作用是把所建立的实体类映射为一个二维表,在映射成二维表的时候在Employee的映射中即在Employee.hbm.xml中设置一个员工所对应的部门,所使用的标签为:
 
   <many-to-one name="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<Employee> emps;
 
属性即可。
 
2.在写配置文件的时候,在Demparment.hbm.xml中只需写一个set标签即可:
 
    <set name="emps">
 
<!--  根据外键的值查询,而不是查询所有的记录-->
 
           <key column="depart_id"/>         
 
<!-- 告诉Hibernate emps是集合属性,是一对多的关联 -->
 
           <one-to-many class="Employee" />  
 
    </set>
 
注:不管是多对一还是一对多,实体类所映射的数据库表中的结构是一样的,因为他们就是相同的,就是所站的角度不同而已
 
 
 
三  双向的多对一或一对多
 
双向的其实从字面的意思可以看出可以从多的一方查找一的一方,也可以从一的一方查找到多的一方,所对应的实体类是把前边两个的结合,映射文件也是
 
 
 
四  一对一(以Person和IdCard为例)
 
1.一对一是一个人只有一个身份证,而一个身份证只属于一个人,有了前边的经验,一对一的实体类的创建也就是在Person的类中多一个IdCard idCard;属性,在IdCard的类中多一个Person person;属性。
 
2.在Person.hbm.xml映射文件中是:
 
    <one-to-one name="idCard"></one-to-one>
 
在IdCard.hbm.xml映射文件中是:
 
<one-to-one name="person"></one-to-one>  
 
 
 
五  在测试类中的总结
 
在测试的时候一般为保存和查询的操作,分为以下几种情况:
 
(1)当是多对一或者是一对多的时候,保存的是向部门中插入的name,和员工中插入的name,员工因为是多个,所以可以插入多个员工,并且把员工设置到Dempartment的对象中,其中对重要的是:
 
employee1.setDepart(department);
 
这句话是把两张表建立起来的
 
(2)在查询的时候是调用session的get方法,利用反射就能得到所关联的对象,例如:
 
Person person = (Person) session.get(Person.class, personId);
 
通过调用Person对象person.getIdCard()方法得到IdCard()类
 
 

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读