简述四种关联映射

来源:互联网 发布:mac队全灭事件真相 编辑:程序博客网 时间:2024/05/21 00:46

一、一对一:分为两种实现关联的方式分别为:

a)        基于主键实现双向一对一

                       i.             分清主从对象,例如  Person------IdCard   公民---身份证    主----从的关系

                     ii.             因为是双向,应在主对象这里设置一个IdCard的成员变量,然后在映射文件中加入<one-by-one name=”idCard”/>即可

                   iii.             在从对象同样设置一个Person对象的成员变量在映射文件中将主键产生的策略修改为foreign,它的主键应是引用Person方产生的主键。格式为:

<id name=”id”column=”id”>

<generatorclass=”foreign”>

<param name=”propert”>person</param>

</generator>

</id>

<one-to-onename=”person” contrained=”true”/>

Contrained属性表示为添加约束,默认的是不添加

b)       基于外键实现双向一对一

                       i.             主对象Person中的映射文件设置

增加<one-to-one name=”idCard” property-ref=”person_id”/>   property-ref 是对应连接的是那一个字段名

                     ii.             从对象IdCard中的映射文件设置

利用多对一的标签来解决,指定unique属性的值为true,则表示唯一性,就会与person表呈现一对一的关系映射

<many-to-onename=”person” column=”person_id” unique=”true”/>这里的column的值应该与person指定的property-ref的值一样

二、多对一、一对多 双向关联

a)        分清多方和一方   employee----department    员工-----部门   实现双向关联

b)       先设置多方,在实体类中增加Department对象的成员变量。然后配置映射文件

<many-to-onename="depart" column="depart_id" foreign-key="id"not-null="true" />

Foreign-key属性指定的是一方的主键   not-null属性可以缺省,不能为空   就是在测试 关联的时候,一定要有一方的主键才能添加多方,否则报错。

c)        然后设置一方。在实体类中添加集合(可选用Set、List、Map等集合)泛型Set<Employee>成员变量,并配置映射文件

<set name="emps">      

<!--指定员工表中外键的列名  -->

<key column="depart_id"></key>

              <!-- 子标签在告诉这个集合表示一对多的关系并用class指定集合存放的对象类型 -->

              <one-to-manyclass="Employee" />

              </set>

       d)分析:在这里实现的是双向关联。如果不配置多方,则代表的是一对多的关联,如果不配置一方,则代表的是多对一的关联

三、多对多

a)        首先分清是否是双向关联,我测试的是双向关联,Teacher----student  老师----学生

b)       配置一个多方Teacher,在实体类中增加集合(可选用Set、List、Map等集合)泛型指定的是Student的成员变量,并配置映射文件

<setname="students" table="teacher_student"><!-- table属性指定的是中间表的名字 -->

              <!—映射的字段为自身的主键,为teacher_id-->

              <keycolumn="teacher_id"></key>

              <!—多对多标签 指定对应类Student和映射的行student_id,这里的映射应该与哪一方的自身映射的一样-->

              <many-to-manyclass="Student" column="student_id">

              </many-to-many>

              </set>

c)        配置另一个多方,在实体类中增加集合(可选用Set、List、Map等集合)泛型指定的是Teacher的成员变量,并配置映射文件

d)             与另一方配置类似。但是必须对应。在这里映射的id应该与另一方对应

<set name="teachers"table="teacher_student">

              <keycolumn="student_id"></key>

              <many-to-manyclass="Teacher"column="teacher_id"></many-to-many>

              </set>

原创粉丝点击