为什么JPQL中的成员被翻译为:(?IN(select ...))。
我在JPQL中创建了以下查询:
select si
from ShoppingItem si
join si.owner u
where u = :owner
and :following member of u.followers"
上述查询已翻译成:
select shoppingit0_.id ...
from shopping_item shoppingit0_
inner join user user1_ on shoppingit0_.owner_id=user1_.id
where
and user1_.id=?
and **(? IN (
SELECT followers2_.id
from following followers2_
where user1_.id=followers2_.target_id)
)** ...
我的技术堆栈:Spring Data JPA,hibernate,InnoDB引擎,MySQL DB ......
正如您所看到 成员正在进行"翻译"进入(? IN (从以下followers2_中选择followers2_.id,其中user1_.id = followers2_.target_id))
MySQL reference提供了优化" in"的建议。带有"存在"的子查询查询。
我的问题是:为什么会员被翻译成?在(选择...)而不是存在选择(...)?
是否有可能告诉hibernate使用"存在"而不是"在"在这种情况下?
答案 0 :(得分:1)
您可以尝试以下查询:
select si
from ShoppingItem si
join si.owner u
where u = :owner
and exists (select f from Following f where f.target = u and f = :following )