我正在使用NHibernate条件API从我的数据库加载一些实体。我的域包含一个抽象类Animal,它是具体的Cat类继承的。另一个具体的类,Tiger,继承自Cat。
我需要从数据库加载所有Cats,所以我正在执行以下操作 -
ICriteria criteria = session.CreateCriteria(typeof(Cat));
return criteria.List<Cat>();
我发现的是Cats和Tigers都是由查询返回而不仅仅是Cats。这是有道理的,因为老虎是一只猫。但在这种特殊情况下,我只想要猫,而不是额外的老虎。
有谁知道我怎么做到这一点?
答案 0 :(得分:1)
这实际上是一个功能。但我认为你可以通过将“每个类的层次结构”与“每个子类的表”混合来做你想要的。因此,您需要一个Discriminator Column,您可以在其上执行查询。这看起来如下:
<class name="Cat" table="Cat">
<id name="Id" type="Int64" column="ID">
<generator class="native"/>
</id>
<discriminator column="TYPE" type="string"/>
<subclass name="Tiger" discriminator-value="TIGER">
<join table="Tiger">
<property name="..." column="..."/>
</join>
</subclass>
</class>
在此之后你应该能够像这样查询discriminator-column:
session.CreateCriteria<Cat>()
.Add(Restrictions.IsNull("TYPE"))
.List<Cat>();