休眠 JOIN FETCH 时不存在关系



我有一个客户实体,其中包含@OneToMany帐户子项。我想执行 fetch join 以返回具有相应活动帐户的客户(具有 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")

编写查询以涵盖这两种情况(没有帐户的客户和具有活动帐户的客户)的干净方法是什么?

所以,基本上,回答我自己的问题 - 解决方案非常简单:

 @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)")

使用内部查询:

select c FROM Customer c LEFT JOIN FETCH (select a from accounts a WHERE a.isActive=true) WHERE c.id = :id