java - JPA 2 查询在 OR 子句上给出奇怪的行为

标签 java eclipselink jpa-2.0

我有一个让我抓狂的 JPA 2 查询。 SurveyQuestion 可能有一个组织。这是 SurveyQuestion 中的映射

@ManyToOne( optional=true )
@JoinColumn( name="organization_key" )
private Organization organization;

组织有一个名为键的字段。我使用以下 jpql 创建了一个 TypedNamedQuery

SELECT q from SurveyQuestion q 
    where q.organization IS NULL 
    or q.organization.key = :organizationKey

通过该查询,我只会得到具有给定键的问题。如果我从查询中删除 q.organization.key = :organizationKey ,那么我会得到所有没有组织的人,但我无法终生得到它来返回那些没有组织或有组织的人的组合给定的组织。

带有 EclipseLink 提供程序的 JPA2。

最佳答案

这是 JPA 标准。

q.organization.key 

解析为 q.organization 上的内部连接,而不是左连接!

你必须这样做:

SELECT q 
  from SurveyQuestion q 
  left join q.organization o
 where o is null OR o.key = :organizationKey

关于java - JPA 2 查询在 OR 子句上给出奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5037810/

相关文章:

java.lang.OutOfMemory错误: GC overhead limit exceeded : Application deployed in weblogic

date - 无法在 Eclipselink 上合并日期

java - 子查询中的条件 API 限制结果

java - 为什么在使用 JPA2 创建模式期间会忽略一个实体?

java - 参数化 native 查询返回空结果集 [参数为逗号分隔字符串](使用 JPA)

java - 从 hashmap 的键对象中获取整数值

java - O(n!)的示例?

java - 使用 EclipseLink JPA 的 SSL

java - touchDragged 的​​奇怪行为

java - java Play! 返回结果后如何执行代码框架?