一对一并指定列

时间:2011-01-23 20:09:26

标签: nhibernate nhibernate-mapping one-to-one

我得到了以下映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">
  <class name="Gate.Users.User, Gate.Models" table="users">
    <id name="Id" column="id">
      <generator class="sequence">
        <param name="sequence">users_id_seq</param>
      </generator>
    </id>
    <one-to-one class="Gate.Extensions.Extension, Gate.Models"  foreign-key="extension_id" name="Extension" />
  </class>
</hibernate-mapping>

表(伪):

table users
(
     id primary key
     extension_id int
)

table extensions
(
     id primary key
     address varchar(40) 
)

我的问题是,在获取扩展名时,nhibernate使用users.id而不是users.extension_id。我的地图以任何方式都不正确吗?

更新

我改为many-to-one绑定,现在可以正常工作了。猜猜我一定误解了one-to-one是如何被使用的?

1 个答案:

答案 0 :(得分:1)

这些表格像多对一一样。 (多个用户可以使用相同的extension_id)

对于一对一,你只需要用户表中的id列(你发布的两个),它应该与扩展表中的id列具有相同的值,这样就真的强制您每个用户只能有一个扩展名,反之亦然。

如果您确实想要维护单独的键,可以使用name属性指定User对象的extensionId属性,使用property-ref属性指定Extension对象的id。 Here's a blog post on it.