Используйте критерии поверх других критериев - PullRequest
1 голос
/ 21 августа 2009

У меня вопрос по критериям: Как я могу использовать Критерии (или аналогичные), которые фильтруют и / или делают что-либо с другими критериями?

Что-то вроде:

выбор клиентов. * Из (выберите * из клиентов) в качестве клиентов

Реальная проблема в другом, но достижение такого поведения было бы потрясающим ...

(кстати, как java, так и .net могут помочь)

спасибо

Ответы [ 4 ]

2 голосов
/ 21 августа 2009

Это не может быть сделано, AFAIK. учебник о HQL гласит:

Обратите внимание, что подзапросы HQL могут встречаться только в предложениях select или where.

Я не могу найти то же самое утверждение о Критериях, но в API единственный способ создать критерии - дать сопоставленный тип. Есть поддержка подзапросов, но только в предложении where. Здесь - это javadoc.

1 голос
/ 21 августа 2009

Вы можете попробовать добавить NHibernate.Criterion.InExpression к вашим критериям.

Нашел пример в этом блоге: http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/08/26/parameter-lists-in-nhibernate.aspx

1 голос
/ 21 августа 2009

Ваше предложение FROM должно быть сопоставленным объектом. Вы можете сделать выборку внутри предложения WHERE ... что-то вроде:

select c from clients c where c.id in (select c2.id from clients c2)

Было бы полезно, если бы вы могли привести лучший пример. Пример, который вы привели, может быть сокращен до следующего HQL:

"from clients"

... что не очень полезно.

0 голосов
/ 21 августа 2009

Я не уверен, что правильно понял ваш вопрос, но если вы хотите сделать выбор в списке объектов, вы можете использовать подзапросы с DetachedCriteria . Я использую его все время, особенно для подкачки объектов при создании левого внешнего соединения, что может привести к неправильному количеству объектов.

Представьте, что у вас есть пользователи, которые покупают продукты, и многие-многие из них имеют отношение:

Dim dc As DetachedCriteria = DetachedCriteria.For (GetType (User)). SetFirstResult (pageNumber * itemsPerPage) .SetMaxResults (itemsPerPage) Session.CreateCriteria (GetType (user)). Add ( Subqueries.PropertyIn ("Id", dc) ). CreateAlias ​​("ProductsBought", "pb", NHibernate.SqlCommand.JoinType.LeftOuterJoin)

Том прав, возможно, вы должны быть более точным ...

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