hibernate domain配置文件的关系映射

最近对于hibernate的关系映射有点遗忘,今天回顾了下以前的学习。一点浅薄观点,有什么不足、错误大家可以在评论指正。

hibernate 表关联关系包括一对一 多对一  一对多  多对多。这种表关系就是对对象之间的关系进行代码明确。外键是这种关联在数据库物理层面上的体现。无论是什么关系,在数据库的物理表中就是一个外键,重要的是映射文件的配置。

一对一分为主键关联一对一     外键关联一对一。

1、基于主键的121(从表的主键为外键)

		<!-- 这里配置person属性和idCard是一对一的关系 -->
		<one-to-one name="idCard" cascade="all"/>

		<!-- constrained="true"表明该121的主键是外键 -->
		<one-to-one name="person" constrained="true"  ></one-to-one>


2、基于外键的121

主表:person表

		<!-- 这里配置person属性和idCard是一对一的关系 -->
		<one-to-one name="idCard"  />	
从表:idcard表

                 <!-- 表明该121的主键是外键 -->
		<!-- unique保证是121关系不会使many21关系 ,idnum列是数据库中生成的-->
		<!-- 与person 对应的person 表是通过idnum 的值关联至idCard 表的 -->	
		<many-to-one name="person" column="idnum" unique="true"/>
3、一对多

主表dept表

		<!-- 配置one2many关系 级联cascade="save-update"-->
		<!-- 当删除部门时可以将和部门有关联的学生也删除,若是不开启级联会报错 -->
		<set name="set" cascade="save-update">
		<!--  设置关系的字段(该字段在多端存在为外键)-->
			<key column="dept_id" />
			<one-to-many class="Student" />
		</set>
从表 学生表

		<!-- column="dept_id" 表示将来自动生成的表的外键名; name对应domain类的属性 -->
		<!--开启级联可以在保存学生时,将关联的部门自动保存  -->
		<many-to-one name="dept" column="dept_id" cascade="all"></many-to-one>
上述的一对多是双向的,dept是one2many  对于学生表来说就是 manytoone。

对于123还是321,谁在前面就是谁管理关系。例如在java代码中实现时:

若是部门管理学生(123)

dept.setStudents(Set<Studnet>studnets);将学生的信息设置到dept中去

若是学生管理部门就是

student.setDept(dept);

当然上述两种java实现的数据库数据都是一样的,但是sql语句可能会有所不同。在后续的管理(级联delete,update)可能会有影响。

对于单项123还是单向321在实际应用中意义都不如双向123.

4、many to many

many to many在管理中都会转变为两个双向ont2many来管理

另外关于单项one2many参看:http://blog.163.com/red_chenxi/blog/static/250272092009111922915283/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值