Hibernate中一對一關聯映射共分爲兩種,一種是一對一主鍵關聯映射,另一種是一對一唯一外鍵關聯映射。下面簡單介紹一下這兩種關聯映射。
一對一主鍵關聯映射
一對一主鍵關聯映射的兩個實體有相同的ID。這種映射又分爲單向一對一關聯主鍵映射和雙向一對一主鍵關聯映射。
單向一對一主鍵關聯映射
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
</hibernate-mapping>
映射文件Person.hbm.xml<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Person" table="t_person">
<id name="id">
<!-- 採用foreign生成策略,forgeign會取得關聯對象的標識 -->
<generator class="foreign">
<!-- property只關聯對象 -->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true"/>
</class>
</hibernate-mapping>
生成的SQL語句create table t_idCard (id integer not null auto_increment, cardNo varchar(255), primary key (id))
create table t_person (id integer not null, name varchar(255), primary key (id))
alter table t_person add index FK785BED803EEB3F3E (id), add constraint FK785BED803EEB3F3E foreign key (id) references t_idCard (id)
表結構如下圖:注意:
雙向一對一主鍵關聯映射
映射文件IdCard.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<one-to-one name="person"/>
</class>
</hibernate-mapping>
映射文件Person.hbm.xml<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Person" table="t_person">
<id name="id">
<!-- 採用foreign生成策略,forgeign會取得關聯對象的標識 -->
<generator class="foreign">
<!-- property只關聯對象 -->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true"/>
</class>
</hibernate-mapping>
constrained="true表示,當前主鍵(person的主鍵)還是一個外鍵,參照了對端的主鍵(IdCard的主鍵),也就是會生成外鍵約束語句create table t_idCard (id integer not null auto_increment, cardNo varchar(255), primary key (id))
create table t_person (id integer not null, name varchar(255), primary key (id))
alter table t_person add index FK785BED803EEB3F3E (id), add constraint FK785BED803EEB3F3E foreign key (id) references t_idCard (id)
表結構如下圖:注意:
小結
一對一唯一外鍵關聯映射
單向一對一唯一外鍵關聯映射
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
</hibernate-mapping>
映射文件Person.hbm.xml<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idCard" unique="true"/>
</class>
</hibernate-mapping>
雙向一對一唯一外鍵關聯
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<one-to-one name="person" property-ref="idCard"/>
</class>
</hibernate-mapping>
映射文件Person.hbm.xml<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idCard" unique="true"/>
</class>
</hibernate-mapping>
create table t_idCard (id integer not null auto_increment, cardNo varchar(255), primary key (id))
create table t_person (id integer not null auto_increment, name varchar(255), idCard integer unique, primary key (id))
alter table t_person add index FK785BED80F7C7B4CE (idCard), add constraint FK785BED80F7C7B4CE foreign key (idCard) references t_idCard (id)
表結構