关联关系的本质是将关联关系映射到数据库中。关联关系在对象模型中体现为内存中的一个或多个引用。 一对多关系: 一对多关系 分为
“
单向一对多/多对一关系
”
和
“
双向多对一
”
关系。
•
“
单向一对多/多对一关系
”
只需在
“
一
”
/
“
多
”
方进行配置,
•
“
双向多对一关系
”
需要在关联双方均加以配置。 双向多对一关联就是在多方和一方都进行配置,并在
“
一
”
方通过属性inverse="true"设置控制关系反转
注:单向多对一关联是最常见的单向关联关系。
注:双向多对一关联是最常见的双向关联关系。双向多对一关联实际上是
“
多对
一
”
与
“
一对多
”
关联的组合。
|
多对一及一对多关联映射的区别(单向):
|
不管多对一还是一对多,都是在"多"的一端添加一个外键指向"一"的一端,只不过是多对一是在多的一端为其自己添外键,而一对多则是在一的一端为多的一端添加外主键。
|
模型:一个用户组(group)对应多个用户(user)。
|
多对一关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为多到一的关系,如:当载入一个用户(user)时将会同时载入组(group)的信息。它的关系映射将写在多的一端(user):
<
many-to-one
name="group"
column
=
"relatedGroup"
cascade
=
"all"
/>
此时它在多的一端(
user
)添加了一个外键
“
relateGroup
”
指向一的一端。在多的一端通过
group
维护一的一端。
|
一对多关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为一到多的关系,如:当载入一个组(group)时将会同时载入此组用户(user)的信息。它的关系映射将写在一的一端(group):
<
set
name="users"
order-by
=
"name"
>
|
<
key
column
=
"relatedGroup"
/>
|
<
one-to-many
class
=
"com.dvnchina.hibernate.User"
/>
</
set
>
此时通过
<
key
column
=
"relatedGroup"
/>
在多的一端(
user
)添加了一个外键
“
relateGroup
”
指向一的一端。在一的一端通过
users
维护多的一端。
|
总之,一对多和多对一的映射策略是一致的,都是通过在"多"的一端添加一个外键指向"一"的一端,只是站的角度不同。
|
本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/119424,如需转载请自行联系原作者