假设我有一只猫,它有两个属性:
- 最喜欢的小猫
- 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”的小猫。
我是否遗漏了一些标准?还是我以错误的方式解决这个问题?