hibernate映射关系讲解

 我来答
大沈他次苹0B
2011-01-04 · TA获得超过7302个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:174万
展开全部
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>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式