六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 26|回复: 0

Hibernate的关联关系映射

[复制链接]

升级  82%

51

主题

51

主题

51

主题

秀才

Rank: 2

积分
173
 楼主| 发表于 2013-2-4 22:09:09 | 显示全部楼层 |阅读模式
Hibernate的关联关系映射
1.单向关联:
a.多对一:
在子表中加入:
<many-to-one name="address"  column="addressId" not-null="true"/>

b.一对一:其实就是many-to-one的一种情况.唯一不同的就是关联中的外键字段具有唯一性约束.
在子表中加入:(unique="true")
<many-to-one name="address"  column="addressId"  unique="true" not-null="true"/>
或者
在主表加入:
<one-to-one name="person" constrained="true"/>

c.一对多:
在主表中加入:
<set name="addresses">
   <key column="personId" not-null="true"/>
   <one-to-many class="Address"/>
</set>

2.使用连接表的单向关联
a.一对多:通过制定unique="true",我们可以把多样性从多对多改变为一对多。
在主表中添加:
<set name="addresses" table="PersonAddress">
    <key column="personId"/>
    <many-to-many column="addressId"  unique="true" class="Address"/>
</set>

b.多对一:
在子表中添加:
<join table="PersonAddress" optional="true">
    <key column="personId" unique="true"/>
    <many-to-one name="address"  column="addressId" not-null="true"/>
</join>

c.一对一:
在子表中添加:
<join table="PersonAddress"  optional="true">
     <key column="personId"  unique="true"/>
     <many-to-one name="address" column="addressId" not-null="true" unique="true"/>
</join>

d.多对多:
<set name="addresses" table="PersonAddress">
    <key column="personId"/>
    <many-to-many column="addressId" class="Address"/>
</set>

3.双向连接:
a.一对多/多对一:
在子表中添加:(子表跟单向的完全相同)
<many-to-one name="address" column="addressId" not-null="true"/>
在主表中添加:(主表比单向多一个inverse="true")
<set name="people" inverse="true">
    <key column="addressId"/>
    <one-to-many class="Person"/>
</set>

b.一对一:
基于外键关联:
在子表中添加:(子表跟单向的完全相同)
<many-to-one name="address" column="addressId" unique="true" not-null="true"/>
在主表中添加:(主表比单向不同的是constrained="true"改成property-ref="address")
<one-to-one name="person" property-ref="address"/>
或者
基于主键关联的:
在子表中添加:
<one-to-one name="address"/>
在主表中添加:
<one-to-one name="person" constrained="true"/>

4.使用连接表的双向关联:
a.一对多/多对一
在子表中添加:
<set name="addresses" table="PersonAddress">
    <key column="personId"/>
    <many-to-many column="addressId" unique="true" class="Address"/>
</set>
在主表中添加:
<join table="PersonAddress" inverse="true" optional="true">
      <key column="addressId"/>
      <many-to-one name="person" column="personId" not-null="true"/>
</join>

b.一对一:
在子表中添加:
<join table="PersonAddress"  optional="true">
    <key column="personId"  unique="true"/>
    <many-to-one name="address" column="addressId" not-null="true" unique="true"/>
</join>
在主表中添加:
<join table="PersonAddress" optional="true" inverse="true">
     <key column="addressId" unique="true"/>
     <many-to-one name="address" column="personId" not-null="true" unique="true"/>
</join>

c.多对多:
<set name="addresses">
    <key column="personId"/>
    <many-to-many column="addressId" class="Address"/>
</set>

<set name="people" inverse="true">
   <key column="addressId"/>
   <many-to-many column="personId" class="Person"/>
</set>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表