Ⅴ. 映射实体关联关系 --- 一对一关联关系 --- 按主键映射
如果customer表和 address表定义成如下关系:
Customers表 |
Addresses表 |
Id <pk> |
Id <pk> <fk> |
Name |
City |
|
Street |
|
Province |
|
Zipcode |
Addresses表的id是addresses的主键,同时作为外键关联customers表。
在customer.hbm.xml中,用<one-to-one>元素来映射customer类的address属性:
<one-to-one name=“address” class=“mypack.address”cascade=“all”>
在address.hbm.xml中,用<one-to-one>元素来映射address类的customer属性:
<one-to-one name=“customer” class=“mypack.customer”constrained =“true”>
<one-to-one>元素的constrained 属性为true,表明addresses表的id主键同时作为外键参照customers表。在address.hbm.xml中,必须为oid使用foreign标识符生成策略:
<id name=“id” type=“long” column=“id”>
<generator class=“foreign”>
<param name=“property”>customer</param>
</generator>
</id>
如果使用foreign标识符生成策略,Hibernate会使address对象与关联的customer对象共享一个oid。
总结:一对一按主键映射,用<one-to-one>写在每个one方。在被关联即address.hbm.xml映射文件中<one-to-one>元素要加上constrained=true属性。并且id要用foreign标识符策略。