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

时间:2011-02-18 04:59:24

标签: java eclipselink jpa-2.0

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

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

组织有一个名为key的字段。我使用以下jpql

创建一个TypedNamedQuery
SELECT q from SurveyQuestion q 
    where q.organization IS NULL 
    or q.organization.key = :organizationKey

使用该查询我只能得到具有给定密钥的问题。如果我从查询中删除q.organization.key =:organizationKey,那么我得到所有那些没有组织的人,但我不能为我的生活让它返回那些没有组织或者没有组织的组合给定的组织。

带有EclipseLink提供程序的JPA2。

1 个答案:

答案 0 :(得分:3)

这是JPA标准。

q.organization.key 

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

你必须这样做:

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