[原创]Hibernate关联关系_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4144 | 回复: 0   主题: [原创]Hibernate关联关系        下一篇 
hang.zhou
注册用户
等级:少尉
经验:350
发帖:12
精华:0
注册:1970-1-1
状态:离线
发送短消息息给hang.zhou 加好友    发送短消息息给hang.zhou 发消息
发表于: IP:您无权察看 2014-7-9 21:14:48 | [全部帖] [楼主帖] 楼主

Hibernate关联关系

>>>>一对多

例如部门与员工的关系,每个部门有多个员工,一个员工只属于某一个部门,具体配置文件如下:

<!-- employees属性,Set集合,表达的是本类与Employee的一对多 

class属性:关联的实体类型

key子元素:对方表中的外键列(多方的那个表)

inverse属性:

默认为false,表示本方维护关联关系。

如果为true,表示本方不维护关联关系。

只是影响是否能设置外键列的值(设成有效值或是null值),对获取信息没有影响。

cascade属性:

默认为none,代表不级联。

级联是指操作主对象时,对关联的对象也做相同的操作。

可设为:delete, save-update, all, none ...

lazy属性:懒加载,默认为true。

true:懒加载,在第一次使用时加载。

false:立即加载,在获取本对象时就加载这个集合的所有元素。

extra:增强的懒加载策略。

-->
<set name="employees" cascade="all" lazy="true">
<key column="departmentId"></key>
<one-to-many class="Employee"/>
</set>
<!-- department属性,表达的是本类与Department的多对一 

class属性:关联的实体类型

column属性:外键列(引用关联对象的表的主键)

-->
<many-to-one name="department" class="Department" column="departmentId"></many-to-one>


>>>>多对多

例如老师与学生的关系,每个老师有多个��生,每个学生也有不止一个老师,具体配置如下:

<!-- teachers属性,Set集合。

表达的是本类与Teacher的多对多。

table属性:中间表(集合表)

key子元素:集合外键(引用当前表主键的那个外键)

-->
<set name="teachers" table="teacher_student" inverse="false">
<key column="studentId"></key>
<many-to-many class="Teacher" column="teacherId"></many-to-many>
</set>
<!-- students属性,Set集合。

表达的是本类与Student的多对多。

-->
<set name="students" table="teacher_student" inverse="true">
<key column="teacherId"></key>
<many-to-many class="Student" column="studentId"></many-to-many>
</set>


>>>>一对一(基于外键)

例如个人与其身份证的关系,每个人只有一个身份证,每个身份证也仅对应特定的某个人,具体配置文件如下:

<!-- person属性,Person类型。

表达的是本类与Person的一对一。

采用基于外键的一对一映射方式,本方有外键方。 

-->
<many-to-one name="person" class="Person" column="personId" unique="true"></many-to-one>
<!-- idCard属性,IdCard类型。

表达的是本类与IdCard的一对一。

采用基于外键的一对一映射方式,本方无外键方。

property-ref属性:

写的是对方映射中外键列对应的属性名。

-->
<one-to-one name="idCard" class="IdCard" property-ref="person"/>


>>>>一对一(基于主键)

<id name="id">
<!-- 当使用基于主键的一对一映射时,

有外键方的主键生成策略一定要是foreign。

参数property:

生成主键值时所根据的对象。

-->
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<!-- person属性,Person类型。

表达的是本类与Person的一对一。

采用基于主键的一对一映射方式,本方有外键方。 

-->
<one-to-one name="person" class="Person" constrained="true"></one-to-one>
<!-- idCard属性,IdCard类型。

表达的是本类与IdCard的一对一。

采用基于主键的一对一映射方式,本方无外键方。

-->
<one-to-one name="idCard" class="IdCard"></one-to-one>




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论