1--->1关联可以基于主键关联,基于主键关联的持久化类不能拥有自己的主键生成器,它的主键由关联实体来负责生成。
采用基于主键的1--->1关联时,应该使用<one-to-one.../>元素来映射关联实体,配置<one-to-one.../>元素时需指定一个name属性,其值为关联实体属性的属性名。
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="db.domain">
<class name="Person" table="persons">
<id name="id" type="integer">
<generator class="foreign">
<param name="property">address</param>
</generator>
</id>
<property name="name" type="string">
<column name="name"></column>
</property>
<property name="age" type="integer">
<column name="age"></column>
</property>
<one-to-one name="address"/>
</class>
</hibernate-mapping>
上面文件中的generator元素是配置基于主键的1--->1关联的关键代码。当采用这种关联映射策略时,person表将作为从表,此时person表的主键将没有自己的主键生成器,因为person表里的记录主键将会与主表address里的记录的主键保持一致。
运行Test.java,查看数据库: