Hibernate关联映射(三)一对一
一对一关联映射(one-to-one)
两个对象之间,是一对一的关系。如:Person 和 IdCard
有两种实现方式可以完成一对一的关联映射:
1.主键关联
让两个对象具有相同的主键值,以表明他们之间一一对应的关系,数据库表不会有额外的字段来维护他们之间的关系,仅仅通过两张表的相同主键来关联。
2.唯一外键关联:和多对一配置一样,只不过用了唯一的限制。
a)主键关联(单向)
Person.java
public class Person implements java.io.Serializable { private Integer id; private String name; private Idcard idCard;}public class Idcard implements java.io.Serializable { private int id; private String cardNumber;}<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2010-8-30 10:14:10 by Hibernate Tools 3.2.1.GA --><hibernate-mapping> <class name="org.jzkangta.hibernate.Person" table="person" catalog="ibatisdb"> <id name="id" type="java.lang.Integer"> <generator > <!-- Person中的ID来源与Idcard实体共享主键 --> <param name="property">idCard</param> </generator> </id> <property name="name" type="string"> <column name="name_" length="50" /> </property> <!-- constrained="true"当前主键存在一个约束,表明Person中的主键作为外键参照了idCard--> <one-to-one name="idCard" constrained="true"/> </class></hibernate-mapping>
public class Idcard implements java.io.Serializable { private int id; private String cardNumber; private Person person;}<hibernate-mapping> <class name="org.jzkangta.hibernate.Idcard" table="idcard" catalog="ibatisdb"> <id name="id" type="int"> <column name="id_" /> <generator /> </id> <property name="cardNumber" type="string"> <column name="card_number_" length="20" /> </property> <one-to-one name="person" /> </class></hibernate-mapping>
<hibernate-mapping> <class name="org.jzkangta.hibernate.Person" table="person" catalog="ibatisdb"> <id name="id" type="java.lang.Integer"> <!-- 唯一外键的话,这里就不需要了 <generator > Person中的ID来源与Idcard实体共享主键 <param name="property">idCard</param> </generator> --> <generator /> </id> <property name="name" type="string"> <column name="name_" length="50" /> </property> <!-- constrained="true"当前主键存在一个约束,表明Person中的主键作为外键参照了idCard <one-to-one name="idCard" constrained="true"/> --> <!-- unique="true"没有这个的话 就是一个多对一,加上之后就有了唯一的限制了--> <many-to-one name="idCard" unique="true"/> </class></hibernate-mapping>
<hibernate-mapping> <class name="org.jzkangta.hibernate.Idcard" table="idcard" catalog="ibatisdb"> <id name="id" type="int"> <column name="id_" /> <generator /> </id> <property name="cardNumber" type="string"> <column name="card_number_" length="20" /> </property> <one-to-one name="person" property-ref="idCard"/> </class></hibernate-mapping>