NHibernate - Помощь с ICriteria - PullRequest
       6

NHibernate - Помощь с ICriteria

1 голос
/ 28 марта 2011

Я пытаюсь преобразовать следующий SQL-запрос в ICriteria в NHibernate.

SELECT DISTINCT m.typeId, t.typeName
FROM Models m, Types t
WHERE m.qualifier=? AND m.typeId IS NOT NULL AND m.typeId = t.typeId

Они оба отображаются в NHibernate в классах, называемых Models и ModelType. ICriteria.List должен возвращать список типа ModelType.

Спасибо

1 Ответ

1 голос
/ 28 марта 2011

Есть хорошие и плохие новости. Вы можете создать критерий, который будет возвращать список ModelTypes. Однако они не будут управляться сессией. Причина в том, что отдельный запрос может возвращать только проекцию, а проекции всегда неуправляемые.

Приведенный ниже запрос сгенерирует запрос, аналогичный приведенному выше, поскольку он выполняет внутреннее соединение двух сущностей и возвращает отдельный набор на основе этих двух столбцов. Преобразователь результата должен быть настроен на генерацию некоторого типа, который может быть установлен через свойства. Вероятно, вы можете вернуть список ModelTypes, но просто знайте, что они не будут управляться сессией.

Session.CreateCriteria<Model>()
   .CreateAlias("Type", "t")
   .Add(Restrictions.Eq("Qualifier", myQualifier)
   .SetProjection(Projections.Distinct(
       Projections.ProjectionList()
          .Add(Projections.Alias(Projections.Property("t.Id"), "Id"))
          .Add(Projections.Alias(Projections.Property("t.TypeName"), "TypeName"))))
   .SetResultTransformer(Transformers.AliasToBean<ModelType>())
...