Hibernate ORM one-to-one映射主要有两种,第一种是一对一外键关联关系映射,即其中的一方的主键作为另一方的外键,另一方的表中不仅有一个主键字段,还有另一个外键字段用来指向一方;第二种就是一对一主键关联关系映射,即其中的一方的主键也是另一方的主键,两者的主键字段保持一致。那么在配置方式上应该如何实现呢?
一。Husband.java
package com.template.model.one2one;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-1
* Time: 下午8:54
*/
public class Husband {
private Integer id;
private String name;
private Wife wife;
public Husband() {
}
}
二。Wife.java
package com.template.model.one2one;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-1
* Time: 下午8:55
*/
public class Wife {
private Integer id;
private String name;
private Husband husband;
public Wife() {
}
}
三。Husband.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-access="field"> <class name="com.template.model.one2one.Husband" table="husband" dynamic-insert="true" dynamic-update="true"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <property name="name" column="name" type="java.lang.String"/> <one-to-one name="wife" class="com.template.model.one2one.Wife"/> </class> </hibernate-mapping>
四。Wife.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-access="field"> <class name="com.template.model.one2one.Wife" table="wife" dynamic-insert="true" dynamic-update="true"> <id name="id" column="husbandid" type="java.lang.Integer"> <generator class="foreign"> <param name="property">husband</param> </generator> </id> <property name="name" column="name" type="java.lang.String"/> <one-to-one name="husband" class="com.template.model.one2one.Husband" constrained="true"/> </class> </hibernate-mapping>
五。数据库表