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,即表示需要根据另一方的主键来生成自己的主键,而该实体本身不具有自己的主键。
映射文件如下:
(2)外键关联:外键可以放在任意一方。
映射文件如下: