我有一个让我抓狂的 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/