Ограничение выразительности Критерии Hibernate (и JPA)? - PullRequest
4 голосов
/ 08 сентября 2011

У меня есть 4 сущности в Иерархии, подобные этой:

               Parent
                  |
       ------------------------
       |          |           |
    Child1     Child2       Child3

И я заинтересован в получении всех экземпляров Child1 и Child2 (но не Child3) с критериями в одноместномЗапрос .

Это легко сделать с HQL (или JPQL) следующим образом:

FROM Parent obj  
WHERE obj IN (FROM Child1 where fieldOfChild1="aa") OR   
      obj IN (FROM Child2 where fieldOfChild2=55) 

Я изучил Hibernate Criteria и JPA Criteria API и Я не могунайти способ выразить этот запрос как Критерии .

Является ли это ограничением API Критерии ?или я просто соскучился?Любой намек?

Ответы [ 2 ]

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

Если у вас есть значение дискриминатора для каждого подкласса в вашем отображении (например, 1 для Child1, 2 для Child2, 3 для Child3), вы можете использовать специальный атрибут "class" в ваших HQL / Критериях.

Таким образом, критерий запроса может быть таким:

session.createCriteria(Parent.class)
       .add(Restrictions.or(Restrictions.eq("class", 1), 
                            Restrictions.eq("class", 2)))

И ваш HQL-запрос упрощен:

FROM parent WHERE class = 1 OR class = 2
0 голосов
/ 08 сентября 2011

Ну, вы сказали, что не указали иерархию классов в своем комментарии, не так ли?

Так что запрос для Child1 и Child2 не может быть построен с помощью Criteria.На самом деле, я не думаю, что ваш пример HQL работает, поскольку Parent не отображается.

Одно уродливое решение - это запрос времени, запрос Criteria для Child1 и другой запрос Criteria для Child2.А затем объединить оба списка результатов в код Java :( Или сопоставить иерархию :))

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