我有一个拥有@OneToMany帐户子项的客户实体。 我想执行获取联接以返回具有相应活动帐户的客户(具有account.isActive = true)。如果客户没有任何账户,也需要退回。
对于以下JPQL,对于拥有非活动帐户的客户,它们确实已被过滤掉,但不会返回没有任何帐户的客户:
@NamedQuery(name = "Customer.findById", query = "SELECT c FROM Customer c LEFT JOIN FETCH c.accounts a WHERE c.id = :id AND a.isActive=true")
编写查询的干净方法是什么,以便覆盖这两种情况(没有帐户的客户和有活动帐户的客户)?
答案 0 :(得分:0)
使用内部查询:
select c FROM Customer c LEFT JOIN FETCH (select a from accounts a WHERE a.isActive=true) WHERE c.id = :id
答案 1 :(得分:0)
所以,基本上,回答我自己的问题 - 解决方案非常简单:
@NamedQuery(name = "Customer.findById", query = "SELECT c FROM Customer c LEFT JOIN FETCH c.accounts a WHERE c.id = :id AND (a is null OR a.isActive=true)")