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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值