один к одному и указание столбца - PullRequest
0 голосов
/ 23 января 2011

Я получил следующее отображение:

<?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 Ответ

1 голос
/ 23 января 2011

Эти таблицы выложены как многие-к-одному. (более одного пользователя может иметь одинаковый extension_id)

Для индивидуального общения вам потребуется только столбец идентификатора в таблице пользователя (из двух опубликованных вами), и он должен иметь то же значение, что и столбец идентификатора в таблице расширений, так что это действительно принудительно, что вы можете иметь только одно расширение для каждого пользователя и наоборот.

Если вы действительно хотите сохранить отдельные ключи, вы можете использовать атрибут name, чтобы указать свойство extensionId вашего объекта User, и атрибут property-ref, чтобы указать идентификатор объекта Extension. Вот пост в блоге.

...