Hibernate--一对一的关联映射

xiaoxiao2021-02-27  229

1 基于外键的单向一对一关系 基于外键的一对一,只需要将多对一种外键约束添加唯一即可。配置如下:

<class name="Person"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="age"/> <!-- unique="true"时候 可以设置一对一的关系 --> <many-to-one name="idCard" class="IdCard" cascade="save-update" column="idcard_id" foreign-key="fk_idcard" not-null="true" unique="true"/> </class>

2 基于外键关联的双向一对一关联

public class IdCard { private int id; private String code; private Person person; } <class name="Person"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="age"/> <!-- unique="true" 时候可以设置一对一的关系--> <many-to-one name="idCard" class="IdCard" cascade="save-update" column="idcard_id" foreign-key="fk_idcard" not-null="true" unique="true"/> </class> public class Person { private int id; private String name; private int age; private IdCard idcard; } <class name="IdCard"> <id name="id"> <generator class="native"></generator> </id> <property name="code"/> <!-- 映射到person中的idCard中,在Person中均互相关联,在Person配置文件中也有映射到IdCard中。 --> <one-to-one name="person" property-ref="idCard"></one-to-one> </class>

基于外键的双向关联,在两个实体映射中均存在指向对方主键的外键。

3 基于主键的单向一对一关联。 不需要外键,因为是基于主键的。两个实体对应的表结构中的主键一一映射。

public class Person { private int id; private String name; private int age; private IdCard idCard; } <class name="Person"> <id name="id"> <!-- foreign表示引用外键 --> <generator class="foreign"> <!-- 引用idCard属性所对应的主键 --> <param name="property">idCard</param> </generator> </id> <property name="name"/> <property name="age"/> <!-- 一对一 通过属性idCard定义的类型来与改表进行映射--> <one-to-one name="idCard" constrained="true" cascade="save-update"/> </class> public class IdCard { private int id; private String code; } <class name="IdCard"> <id name="id"> <generator class="native"></generator> </id> <property name="code"/> </class>

生成的语句:

alter table Person add constraint FK_3blpx78aucutb5umaelf9essh foreign key (id) references IdCard (id)

说明: 通过一个属性的定义类型来找到映射的关联实体类。

5 基于主键的双向一对一关联。 与基于主键的单向一对一关联类似,只需要两个实体的配置文件中互相通过属性的类型来相关映射。

public class Person { private int id; private String name; private int age; private IdCard idCard; } <class name="Person"> <id name="id"> <!-- foreign表示引用外键 --> <generator class="foreign"> <!-- 引用idCard属性所对应的主键 --> <param name="property">idCard</param> </generator> </id> <property name="name"/> <property name="age"/> <!-- 一对一 --> <one-to-one name="idCard" constrained="true" cascade="save-update"/> </class> public class IdCard { private int id; private String code; private Person person; } <class name="IdCard"> <id name="id"> <generator class="native"></generator> </id> <property name="code"/> <one-to-one name="person"/> </class>

生成关联SQL语句: alter table Person add constraint FK_3blpx78aucutb5umaelf9essh foreign key (id) references IdCard (id)

转载请注明原文地址: https://www.6miu.com/read-9174.html

最新回复(0)