0

我有两个类:CatDomesticCat,扩展Cat

我想选择所有Cats,但没有一个DomesticCat。如何使用 NHibernate 标准 API 做到这一点?

4

2 回答 2

2
var nonDomesticCats = session.CreateCriteria<Cat>()
                             .Add(Restrictions.Eq("class", typeof(Cat)))
                             .List<Cat>();

class是一个伪属性,表示类层次结构中实体的具体类型。

它可以透明地与除隐式之外的任何继承策略一起使用。

于 2010-05-28T12:49:59.023 回答
0

好吧,这取决于实施。

例如,如果您有一个鉴别器列(假设继承类使用 value 进行鉴别<discriminator column="CatType" type="string"/>),您可以进行这样的查询DomesticCat"domestic"

var allCatsButDomestic = nhSes.CreateQuery("from Cat c where c.CatType <> :catType")
     .SetString("catType", "domestic")
     .List<Cat>();

(在此特定示例中,Cat 抽象类还将 CatType 列映射到 CatType 字符串属性)

编辑和标准形式

var nonDomesticCats = session.CreateCriteria<Cat>()
                             .Add(Restrictions.Not(Restrictions.Eq("CatType", "domestic")))
                             .List<Cat>();

您对 AnotherCat 的评论再次暗示在数据库级别存在某种区分实体的方法。

于 2010-05-28T11:46:09.563 回答