如何防止NHibernate查询返回子类?

时间:2009-07-30 15:03:53

标签: nhibernate

我正在使用NHibernate条件API从我的数据库加载一些实体。我的域包含一个抽象类Animal,它是具体的Cat类继承的。另一个具体的类,Tiger,继承自Cat。

我需要从数据库加载所有Cats,所以我正在执行以下操作 -

ICriteria criteria = session.CreateCriteria(typeof(Cat));
return criteria.List<Cat>();

我发现的是Cats和Tigers都是由查询返回而不仅仅是Cats。这是有道理的,因为老虎是一只猫。但在这种特殊情况下,我只想要猫,而不是额外的老虎。

有谁知道我怎么做到这一点?

1 个答案:

答案 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>();