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>


猜你喜欢

转载自blog.csdn.net/sxf1997/article/details/41214923
今日推荐