当没有关系时,Hibernate JOIN FETCH

时间:2017-10-29 17:08:53

标签: hibernate join where fetch

我有一个拥有@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")

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

2 个答案:

答案 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)")