0

我得到以下映射:

<?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它是如何使用的?

4

1 回答 1

1

这些表的布局类似于多对一。(多个用户可能具有相同的 extension_id)

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

如果你真的想维护单独的键,你可以使用 name 属性来指定你的 User 对象的 extensionId 属性和 property-ref 属性来指定 Extension 对象的 id。 这是一篇关于它的博客文章。

于 2011-01-23T20:37:42.293 回答