我有一个带有@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)")
关于不存在关系时的 Hibernate JOIN FETCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47002944/