2017-01-27 3 views
1

У меня есть проблема с JPA запроса:JPA Где Exists/Регистрация

SELECT DISTINCT p FROM Product p INNER JOIN p.shopCategories sc WHERE EXISTS (SELECT DISTINCT sc2 FROM Customer c INNER JOIN c.shopCategories as sc2 WHERE c.customerId=7) 

Результат должен быть только те страницы, которые есть магазин категории, где клиент заказанные что магазин категория.

< Продукт -> ShopCategory < -> Клиент

Но результат список всех продуктов, для которых любой ShopCategory существует.

Любые идеи по улучшению запроса?

ответ

0

Я бы просто присоединиться все путями к клиенту

SELECT DISTINCT p 
FROM Product p 
    INNER JOIN p.shopCategories sc 
    INNER JOIN sc.customer c 
WHERE c.customerId = 7 

Если у вас есть двунаправленные отображения в вашем ShopCategories сущности, конечно.

Update

Использование EXISTS, я думаю, нужно соотнести внутренний запрос с родителем одного:

SELECT DISTINCT p FROM Product p INNER JOIN p.shopCategories sc 
WHERE EXISTS (SELECT DISTINCT sc2 FROM Customer c INNER JOIN c.shopCategories as sc2 WHERE c.customerId=7 and sc = sc2) 
+0

К сожалению, нет двунаправленной связи. Любая другая идея? – Stack

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