hibernate中的关联关系小结

一对一关联关系:

①主键关联:

为了表示一对一关系,在两个映射表中都要使用<one-to-one>标记。

以company和Login之间的一对一关联关系。他们共享一个主键id,这个主键可由company或login表生成。

问题是如何让另一张表引用已经生成的主键值呢?

这就要在hibernate的映射文件中使用主键的foreign生成机制。

company.hbm.xml:
<!--映射company与login的一对一主键关联-->
<one-to-one name="login" cascade="all"  class="PO.Login" lazy="false" fetch="join" outer-join="true"/>

Login.hbm.xml:
<span style="color:#ff0000;"><id column="ID" name="id" type="integer"></span>
<span style="color:#ff0000;"><span style="white-space:pre">	</span><generator class="foreign"></span>
<span style="color:#ff0000;"><span style="white-space:pre">		</span><param name="property">company</param></span>
<span style="color:#ff0000;"><span style="white-space:pre">	</span></generator></span>
<span style="color:#ff0000;"></id></span>


<!--映射company与login的一对一关联。-->
<one-to-one name="company" class="PO.Company" constrained="true"/>



②外键关联:

外键关联的要点是两个表各有不同的主键,但其中一个表有一个外键引用另一个表的主键


以Client和Address表为例,Client类的address为外键引用Address类的对应表中的主键,设置address为unique的值为true,即这个外键是唯一的,即成为一对一关系。

Address.hbm.xml:

<!--映射Client与Address的一对一外键关联-->
<one-to-one name="client" class="PO.Client" property-ref="address"/>

Client.hbm.xml:

该表中有address字段

<!--映射Client到Address的一对一外键关联,唯一的多对一,实际上变成了一对一关系-->
<many-to-one name="address" class="PO.Address" column="address" cascade="all" lazy="false" unique="true"/>



一对多关联关系

①单向关联:

以Customer(客户)与订单(Orders)为例

Customer.hbm.xml:

<!--一对多双向关联映射 customer到orders,单的一方配置-->
<set name="orders" table="orders"  cascade="all" inverse="true" lazy="false" sort="natural">
<key column="CUSTOMER_ID"/>
<one-to-many class="PO.Orders"/>
</set>
<key>子元素的column属性指定关联表的外键(此处为orders表)

<one-to-many>的class属性指定了关联类的名字


Orders.hbm.xml:

<!--一对多双向关联映射中多的一方配置-->
<many-to-one name="customer" class="PO.Customer" column="CUSTOMER_ID" lazy="false" not-null="true"/>




多对多的关联:

Items.hbm.xml:

<!--映射Items到Orders的多对多关联-->
<set name="orders" table="selecteditems" cascade="save-update" inverse="true" lazy="true">
<key column="ITEMID"/>
<many-to-many class="PO.Orders" column="ORDERID"/>
</set>


Orders.hbm.xml:

<!--映射Orders到Items的多对多关联-->
<set name="items" table="selecteditems" cascade="save-update" lazy="true">
<key column="ORDERID"/>
<many-to-many class="PO.Items" column="ITEMID"/>
</set>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发哥1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值