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>
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>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询