2010-08-26 82 views
0

比方說,我有一個具有兩個屬性貓:如何使用NHibernate的標準查詢基於附加條件加載協會

  • 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是相同的小貓:一個與Ra 「2」的nk。

我是否遺漏了某些標準?或者我會以這種錯誤的方式去解決這個問題?

回答

0

迭戈,在nhibernate郵件列表中,幫助我看到我的方式的錯誤。我有一切結構錯誤。

根據他的建議,我決定將Kittens映射到數據庫中;作爲列表。