不存在关系时的 Hibernate JOIN FETCH
Hibernate JOIN FETCH when no relation exists
我有一个带有@OneToMany 帐户子项的客户实体。
我想执行提取加入 return 一个客户及其相应的活动帐户(account.isActive = true)。如果客户没有任何帐户,也需要 returned。
对于以下 JPQL,对于具有非活动帐户的客户,它们确实被过滤掉了,但是没有任何帐户的客户未被 returned:
@NamedQuery(name = "Customer.findById", query = "SELECT c FROM Customer c LEFT JOIN FETCH c.accounts a WHERE c.id = :id AND a.isActive=true")
编写查询以涵盖两种情况(没有帐户的客户和有活动帐户的客户)的简洁方法是什么?
使用内部查询:
select c FROM Customer c LEFT JOIN FETCH (select a from accounts a WHERE a.isActive=true) WHERE c.id = :id
所以,基本上,回答我自己的问题 - 解决方案非常简单:
@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)")
我有一个带有@OneToMany 帐户子项的客户实体。 我想执行提取加入 return 一个客户及其相应的活动帐户(account.isActive = true)。如果客户没有任何帐户,也需要 returned。
对于以下 JPQL,对于具有非活动帐户的客户,它们确实被过滤掉了,但是没有任何帐户的客户未被 returned:
@NamedQuery(name = "Customer.findById", query = "SELECT c FROM Customer c LEFT JOIN FETCH c.accounts a WHERE c.id = :id AND a.isActive=true")
编写查询以涵盖两种情况(没有帐户的客户和有活动帐户的客户)的简洁方法是什么?
使用内部查询:
select c FROM Customer c LEFT JOIN FETCH (select a from accounts a WHERE a.isActive=true) WHERE c.id = :id
所以,基本上,回答我自己的问题 - 解决方案非常简单:
@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)")