欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate关联关系映射

程序员文章站 2024-03-04 08:14:05
...

1. 单向一对一

(1)主键关联:两个表通过主键建立一对一关联关系,从表的主键由被关联类生成。
映射代码:

<!--主键生成器-->
<generator class="foreign"/>  <!--生成策略设为foreign,表明由关联类来生成主键-->
<one-to-one name="关联属性的属性名" class="持久化类" constrained="true">
</one-to-one>
 <!--constrained="true"表明从表的表名有关联类生成-->

(2)外键关联:两张表的主键不同,通过在一张表中添加外键来保持一对一。
映射代码:

<!--主键生成器-->
<generator class="identity">
<many-to-one name="关联属性的属性名" class="持久化类" unique="true">
</many-to-one>
<!--unique="true"表明在多的一端添加了唯一属性-->

3. 单向一对多

主要通过外键关联,在多的一端添加一个外键,由“一”的方向指向“多”的一方。在“一”的一方添加one-to-many
映射代码:

<set name="adresses" table="ADRESS" inverse="false" lazy="true">
<!--inverse="false"表明由本表来维护关联   lazy="true"表明不采用延迟加载-->
    <key>
        <column name="USER_ID">      <!--外键列-->
    </key>
    <one-to-many class="Address"/>    <!--映射到关联类属性-->
</set>

4. 单向多对一

通过外键关联,由“多”的一方指向“一”的一方,在“多”的一方数据表增加一个外键指向“一”表示的数据表,“一”的一方作为主表,“多”的一方作为从表。在“多”的一方使用many-to-one
映射代码:

<many-to-one name="关联属性属性名" class="持久化类" fetch="join">  <!--fetch="join"表示外连接抓取-->
    <column name="外键列"/>
</many-to-one>

5. 单向多对多

通过中间表将两个主表关联起来。中间表的作用是将两张表的主键作为其外键,通过外键建立这两张表的映射关系。假设:多个用户User对应多个地址Address
User的映射文件:

<!--user_address是中间表-->
<set name="adresses" table="USER_ADRESS" inverse="false" lazy="true">
<!--inverse="false"表明由本表来维护关联   lazy="true"表明不采用延迟加载-->
    <key>
        <column name="USERID">      <!--指定USER表关联到中间表的外键列名-->
    </key>
    <one-to-many class="Address"/>    <!--映射到关联类属性-->
</set>

6. 双向一对一
(1)主键关联:在需要的一方配置文件中将主键生成策略配置成foreign,即表示需要根据另一方的主键来生成自己的主键,而该实体本身不具有自己的主键。
映射文件如下:
Hibernate关联关系映射
Hibernate关联关系映射
(2)外键关联:外键可以放在任意一方。
映射文件如下:
Hibernate关联关系映射
Hibernate关联关系映射