Выберите все объекты точного класса, но не производные от него с помощью API NHibernate Criteria - PullRequest
0 голосов
/ 28 мая 2010

У меня есть два класса: Cat и DomesticCat, которые расширяются Cat.

Я хочу выбрать все Cat с, но ни одного DomesticCat. Как это сделать с помощью API критериев NHibernate?

Ответы [ 2 ]

2 голосов
/ 28 мая 2010
var nonDomesticCats = session.CreateCriteria<Cat>()
                             .Add(Restrictions.Eq("class", typeof(Cat)))
                             .List<Cat>();

class - это псевдо-свойство, представляющее конкретный тип сущностей в иерархии классов.

Может использоваться прозрачно с любой стратегией наследования, кроме неявной.

0 голосов
/ 28 мая 2010

ну, это зависит от реализации.

Если, например, у вас есть столбец дискриминатора (скажем, <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 снова подразумевает, что существует некоторый способ различения сущностей на уровне БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...