Hibernate关联关系配置一对多一对一和多对多Word格式.docx
《Hibernate关联关系配置一对多一对一和多对多Word格式.docx》由会员分享,可在线阅读,更多相关《Hibernate关联关系配置一对多一对一和多对多Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
?
xmlversion="
1.0"
encoding="
utf-8"
>
!
DOCTYPEhibernate-mappingPUBLIC"
-//Hibernate/HibernateMappingDTD3.0//EN"
"
<
hibernate-mapping>
classname="
com.suxiaolei.hibernate.pojos.Customer"
table="
customer"
--主键设置-->
idname="
id"
type="
string"
columnname="
/column>
generatorclass="
uuid"
/generator>
/id>
--属性设置-->
propertyname="
username"
column="
/property>
balance"
integer"
setname="
orders"
inverse="
true"
cascade="
all"
keycolumn="
customer_id"
>
/key>
one-to-manyclass="
com.suxiaolei.hibernate.pojos.Order"
/>
/set>
/class>
/hibernate-mapping>
订单(多方):
orderNumber"
cost"
many-to-onename="
class="
save-update"
/many-to-one>
"
关联关系,Customer方对应多个Order方,所以Customer包含一个集合用于存储多个Order,Order包含一个Customer用于储存关联自己的Customer。
一对多关联关系有一种特例:
自身一对多关联。
例如:
自身一对多关联自身的hbm文件设置:
com.suxiaolei.hibernate.pojos.Category"
category"
name"
chidrenCategories"
category_id"
parentCategory"
外键存放父亲的主键。
第二种关联关系:
多对多
多对多关系也很常见,例如学生与选修课之间的关系,一个学生可以选择多门选修课,而每个选修课又可以被多名学生选择。
数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。
数据表间多对多关系如下图:
多对多关系在hbm文件中的配置信息:
学生:
com.suxiaolei.hibernate.pojos.Student"
student"
increment"
courses"
false"
student_course"
student_id"
many-to-manyclass="
com.suxiaolei.hibernate.pojos.Course"
course_id"
/many-to-many>
课程:
course"
students"
其实多对多就是两个一对多,它的配置没什么新奇的相对于一对多。
在多对多的关系设计中,一般都会使用一个中间表将他们拆分成两个一对多。
set>
标签中的"
table"
属性就是用于指定中间表的。
中间表一般包含两个表的主键值,该表用于存储两表之间的关系。
由于被拆成了两个一对多,中间表是多方,它是使用外键关联的,<
key>
是用于指定外键的,用于从中间表取出相应的数据。
中间表每一行数据只包含了两个关系表的主键,要获取与自己关联的对象集合,还需要取出由外键所获得的记录中的另一个主键值,由它到对应的表中取出数据,填充到集合中。
many-to-many>
中的"
column"
属性是用于指定按那一列的值获取对应的数据。
例如用course表来说,它与student表使用一个中间表student_course关联。
如果要获取course记录对应的学生记录,首先需要使用外键"
从student_course表中取得相应的数据,然后在取得的数据中使用"
列的值,在student表中检索出相关的student数据。
其实,为了便于理解,你可以在使用course表的使用就把中间表看成是student表,反之亦然。
这样就可以使用一对多的思维来理解了,多方关联一方需要外键那么在本例子中就需要"
来关。
第三种关联关系:
一对一
一对一关系就球队与球队所在地之间的关系,一支球队仅有一个地址,而一个地区也仅有一支球队(貌似有点勉强,将就下吧)。
数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。
图示如下:
一对一外键关联:
一对一主键关联:
要求两个表的主键必须完全一致,通过两个表的主键建立关联关系:
一对一外键关联在hbm文件中的配置信息:
地址:
com.suxiaolei.hibernate.pojos.Adress"
adress"
city"
one-to-onename="
team"
com.suxiaolei.hibernate.pojos.Team"
/one-to-one>
球队:
adress_id"
unique="
一对一外键关联,其实可以看做是一对多的一种特殊形式,多方退化成一。
多方退化成一只需要在<
many-to-one>
标签中设置"
unique"
="
。
一对一主键关联在hbm文件中的配置信息:
foreign"
paramname="
property"
adress<
/param>
一对一主键关联,是让两张的主键值一样。
要使两表的主键相同,只能一张表生成主键,另一张表参考主键。
<
class"
就是设置team表的主键参照adress属性的主键值。