2017-01-24 6 views
4

с использованием JPA 2.1 и спящий режим 5.1.x, это возможно с JPQLКак уйти присоединиться к двум несвязанным объектам с критериями JPA?

select s.lowerBound, 
l.status 
... 
from Serie s 
left join Line l on 
s.lowerBound between l.lineStart and l.lineEnd 

как я пишу это, используя критерии API? я попытался это

Root<Serie> serieRoot = query.from(Serie.class); 
Root<Line> lineRoot query.from(Line.class); 
query.where(criteriaBuilder.between(s.get("lowerBound"), l.get("lineStart"), s.get("lineEnd"))) 

, но это не позволяет мне указать это левое соединение.

ответ

1

Что вы делаете с запросом Criteria, не позволяет указать это как левое соединение, потому что это не левое соединение. У вас только несколько корней в вашем запросе, и в соответствии с Hibernate documentation, который использует декартовые продукты, однако с левым соединением вы получаете нули с правой стороны, если совпадений нет.

Поскольку Form interface позволяет создавать соединения из атрибутов вашего объекта, я думаю, что то, чего вы хотите достичь, не может быть выполнено с помощью API критериев. Вы либо должны сделать два запроса в базе данных, либо использовать JPQL или SQL для этого в одном запросе.

+1

Это позор, который нельзя сделать с помощью критериев API. каждый подход, будь то JPQL или API критериев, не имеет нескольких функций, которые есть у другого. это расстраивает – kfc

Смежные вопросы