0

2つのプロパティを持つ猫がいるとしましょう。

  • FavoriteKitten
  • SecondFavoriteKitten

これらの子猫はランクによって区別されます。

猫を乗せるときは、ランクが「1」の子猫をFavoriteKittenにし、ランクが「2」の子猫をSecondFavoriteKittenにします。

基盤となるデータベースは次のようになります。

table Cat
----------------
CatId


table Kitten
-----------------
KittenId
CatId
Rank

私のマッピングは次のようになります:

<class name="Cat">
  ... other stuff
  <one-to-one name="FavoriteKitten" class="Kitten" property-ref="Cat" cascade="all-delete-orphan" />
  <one-to-one name="SecondFavoriteKitten" class="Kitten" property-ref="Cat" cascade="all-delete-orphan" />
</class>

私の基準クエリは次のようになります

Cat cat = sess.CreateCriteria(typeof(Cat))
.CreateAlias("FavoriteKitten", "kt1")
.Add(Expression.Eq("kt1.Rank", "1"))
.CreateAlias("SecondFavoriteKitten", "kt2")
.Add(Expression.Eq("kt2.Rank", "2"))
.UniqueResult();

問題は、一度ロードされると、FavoriteKittenとSecondFavoriteKittenの両方が同じ子猫、つまりランクが「2」の子猫であるということです。

基準から外れたものはありますか?それとも私はこれを間違った方法で行っていますか?

4

1 に答える 1

0

ディエゴは、nhibernateメーリングリストに載っていて、私のやり方の誤りを理解するのを手伝ってくれました。私はすべてが間違って構成されていました。

彼の提案に従って、私は子猫をデータベースにあるとおりにマッピングすることにしました。リストとして。

于 2010-08-26T17:43:01.150 に答える