2016-01-13 2 views
2

Я сражаюсь весь этот день, и я не могу понять это. Я начинаю JPA, так что теперь API Критерии - кошмар для меня. Проблема:Выбор критериев JPA с двумя подзапросами/объединениями

У меня 3 объекта: Политика, покупатель, страховщик. В политике есть ссылки на Клиента и Страховщика (с нетерпением ожидаем здесь). У клиента есть список политик, так же как и Страховщик (ленивый выбор здесь).

Я пытаюсь найти все политики, таким способом, описанным ниже (SQL):


SELECT * FROM POLICY as p WHERE 
p.CUSTOMER_ID IN (SELECT ID FROM CUSTOMER as c WHERE [customerPredicates]) 
AND 
p.INSURER_ID IN (SELECT ID FROM INSURER as i WHERE [insurerPredicates]) 
AND 
[policyPredicates] 

Где CUSTOMER_ID/INSURER_ID являются JoinColumns, полученные от @ManyToOne отношений в политике.

customerPredicates/insurerPredicates/policyPredicates - это списки предикатов (условия «где» подготовлены по заданным критериям поиска).

Как я могу достичь этого в API критериев? Что такое правила/рекомендации для создания таких запросов?

ответ

1

Попытка переписать SQL первого употребления JOINS

SELECT * 
FROM POLICY as p 
    INNER JOIN CUSTOMER as c ON p.CUSTOMER_ID = c.ID 
    INNER JOIN INSURER as i ON p.INSURER_ID = i.ID 
WHERE [customerPredicates]) 
AND 
[insurerPredicates]) 
AND 
[policyPredicates] 

все, что вам нужно, это критерии апи, чтобы получить основные критерии (для субъекта политики) и создать псевдонимы для лица клиента и Страховщиком лица.

Criteria criteria = session.createCriteria(Policy.class, "p"); 
    criteria.setFetchMode("p.Customer", FetchMode.JOIN); 
    criteria.createAlias("p.Customer", "c"); 

и добавьте свое ограничение на псевдоним «c» для Клиента.

И то же самое для Страховщика

+0

Да, переписывание этого SQL может помочь мне подойти к этому, но я хотел бы использовать чистый ** JPA Criteria API **, а не в Hibernate Crtiteria для этого. Я пытаюсь понять выбор и наложение псевдонимов в критерии JPA, но я смущен ... –

+0

JPA также имеет псевдонимы. Таким образом, вы можете использовать ту же логику с чистым API-интерфейсом JPA – StanislavL

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