10

NHibernate に正しいクエリを生成させることができません。1 対 1 の関係のために結合している 2 つのテーブルの主キーを使用し続けますが、テーブルの 1 つで外部キーを指定する方法がわかりません。

tableA      tableB
{ aID,      { bID,
  bID,        z,
  c,          y,
  d }         x }

したがって、tableA は tableA.bID = tableB.bID を使用して tableB に結合する必要があります。tableA のマッピングでこれを指定するにはどうすればよいですか? tableA クラスを使用して tableA から行を取得し、tableB から行を取得しています。これは実際の 1 対 1 の関係です。

NHibernate は tableA.aID = tableB.bID を使用してテーブルを結合するための SQL を生成しますが、これは間違っています。

これは動作しません:

<class name="tableA" table="tableA">
  <id name="aID" column="aID" />
  <property name="bID" column="bID" />
  <property name="c" column="c" />
  <property name="d" column="d" />
  <one-to-one name="otherThing" class="tableB" foreign-key="bID" />
</class>

<class name="tableB" table="tableB">
  <id name="bID" column="bID" />
  <property name="z" column="z" />
  <property name="y" column="y" />
  <property name="x" column="x" />
</class>
4

2 に答える 2

8

これは、それをマッピングする正しい方法です:

<class name="tableA" table="tableA">
  ...
  <many-to-one name="otherThing" class="tableB" column="bID" unique="true" />
</class>
  • これは本当に 1 対 1 であると想定しているため、unique.
  • 各列を 1 回マップする必要があります。リレーションシップの場合、int プロパティではありません。

tableB から tableA への参照は、次のように実装されます。

<class name="tableB" table="tableB">
  ...
  <one-to-one name="A" class="tableA" property-ref="otherThing" />
</class>

これはすべてhttp://nhibernate.info/doc/nh/en/index.html#mapping-declaration-onetooneに記載されています

于 2010-10-06T15:22:34.330 に答える
-1

同じ値に対して 1 対 1 の関係も定義している場合は、マッピング ファイルでプロパティをプロパティとして指定する必要はありません。1 対 1 を使用していないため、別の問題がある可能性がありますが、次の行を削除します。

<property name="bID" column="bID" /> 

tableA から、それが役立つかどうかを確認します。

于 2010-10-06T14:57:49.270 に答える