不存在关系时的 Hibernate JOIN FETCH

标签 hibernate join where 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)")

关于不存在关系时的 Hibernate JOIN FETCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47002944/

相关文章:

java - 如何在没有 xml 的 Dropwizard HibernateBundle 类上设置命名策略?

mysql - 当持久化实体之间具有一对一关系时,JPA 会出现 Hibernate 问题

sql - 使用 “not exists”的SQL查询不起作用

Python 和 Mysql : Select statement with variable

c# - 使用对象列表连接表

c# - System.Linq.Enumerable.WhereListIterator 和 System.Linq.Enumerable.WhereSelectListIterator 之间有什么区别?

java - 将 Hibernate 数据导出到 SQL 语句?

java - 将 TransactionProxyFactoryBean 与 Spring 和 Hibernate 一起使用

MySQL UPDATE 和 JOIN 在同一个表上

Python Pandas 加入索引值