Критерии гибернации эквивалентны предложению IN в подзапросах? - PullRequest
2 голосов
/ 08 сентября 2011

Я хотел бы перевести запрос, подобный следующему:

FROM Entity_1 obj
WHERE obj IN (FROM Entity2) OR 
      obj IN (FROM Entity3)

В форму Критерии гибернации, и официальной документации Hibernate недостаточно, поскольку в ней не сказано, какприменить заявление IN.

Любой намек?

1 Ответ

9 голосов
/ 08 сентября 2011

В API критериев нет условия для добавления другого запроса в качестве ограничения. Я думаю, что @Niroshan Abayakoon пытался сказать, что вам нужно выполнять запросы для предложения IN отдельно и добавлять результат Restrictions.in() условие.

List<?> entity2Data=//get data from either a query or criteria
List<?> entity3Data=//get data from either a query or criteria
Criteria c = // obtain criteria from session
// basically creates an OR condition chain
Disjunction orConditions = Restrctions.disjunction();
orConditions.add(Restrictions.in("obj", entity2Data));
orConditions.add(Restrictions.in("obj", entity3Data));
c.add(orConditions); 

это приведет к гибернации, чтобы рассмотреть список в предложении IN.

В таких ситуациях всегда лучше использовать HQL.

...