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.extension_idではなくusers.idを使用することです。私のマッピングは何らかの形で間違っていますか?

アップデート

I changed to a many-to-one binding, and now it works. Guess I've must misunderstood how one-to-one is used?

4

1 に答える 1

1

これらのテーブルは、多対 1 のように配置されます。(複数のユーザーが同じ extension_id を持つことができます)

1対1の場合、(投稿した2つのうち)ユーザーのテーブルのid列のみが必要であり、拡張テーブルのid列と同じ値を持つ必要があります。そのようにして、実際に強制されますユーザーごとに内線番号を 1 つだけ持つことができ、その逆も同様です。

本当に個別のキーを維持したい場合は、name 属性を使用して User オブジェクトの extensionId プロパティを指定し、property-ref 属性を使用して Extension オブジェクトの ID を指定できます。 これに関するブログ記事はこちらです。

于 2011-01-23T20:37:42.293 に答える