hibernate一对一单项关联映射
一、主键关联
1、两个实体对象的主键一样,以表明它们之间的一一对应关系;
2、不需要多余的外键字段来维护关系,仅通过主键来关联,即Person的主键要依赖IdCard的主键,他们共用一个主键值。
Person.hbm.xml文件:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.liang.hibernate"> <class name="Person" table="t_person"> <id name="id"> <!-- 采用foreign生成策略,forgeign会取得另外一个关联对象的标识 --> <generator class="foreign" > <param name="property">idCard</param> </generator> </id> <property name="name"></property> <!-- one-to-one指示hibernate如何加载其关联对象,默认根据主键加载 也就是拿到关系字段值,根据对端的主键来加载关联对象 constrained="true"表示约束,当前主键(person的主键)还是一个外键 参照了对端的主键(IdCard的主键),也就是会生成外键约束语句 --> <!-- idCard属性,表达的是本对象与IdCard的一对一关系。 --> <one-to-one name="idCard" class="IdCard" constrained="true"></one-to-one> </class> </hibernate-mapping>
二、唯一外键关联
1、两个实体对象用一个外键来关联,以表表明对象之间的关系。
2、其实它是多对一关联映射的特例,多的一端加上唯一的限制之后,用来表示一对一的关联关系。
Person.hbm.xml文件:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.liang.hibernate"> <class name="Person" table="t_person"> <id name="id"> <generator class="native" ></generator> </id> <property name="name"></property> <!-- 由于它是一对一的唯一外键关联,它是多对一关联的特例,注释可以直接写成多对一关联--> <!-- idCard属性,表达的是本对象与IdCard的多对一关系。 -->
<!-- 采用<mang-to-one>标签来映射,指定多的一端unique为true,
这样就限制了多的一端的多重性为一,就是这样来映射的。
-->
<many-to-one name="idCard" class="IdCard" column="idCardId" unique="true"></many-to-one>
</class> </hibernate-mapping>