`
and4walker
  • 浏览: 557835 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate的关联关系映射

阅读更多
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>




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics