Преобразование ограничения HQL «in» в критерии - PullRequest
4 голосов
/ 05 сентября 2011

У меня такой запрос:

Query query = session.createQuery("from table1 c where c.colummewhatever =:value and (select p.colummewhatever from table2 p where c.fkidcolumme=p.idcolumme) in (:listPColummewhatever) ");

Можно ли перевести ограничение in в Criteria?

Ответы [ 2 ]

0 голосов
/ 06 июля 2012

Использование Criteria API должно быть примерно таким ...

DetachedCriteria dc = new DetachedCriteria.forClass(Table1.class,"c");
dc.createAlias("table2","p")
dc.add(Restrictions.in("p.colFoo",yourListFoo);
dc.add(Restrictions.eq("c.col",value);

List<Table1> = dc.getExecutableCriteria(session).list();
0 голосов
/ 11 января 2012

Мне кажется, что этот запрос можно переписать с помощью простого объединения:

from Table1 c inner join c.table2 p
where c.colummewhatever =:value 
and p.colummewhatever in (:listPColummewhatever)

Перевод этого HQL-запроса в критерии теперь стал намного проще.

Это, конечно, предполагает, что у вас есть связь между таблицей 1 и таблицей 2, но у вас должна быть такая.

...