2011-02-18 23 views
1

我有一個JPA 2查詢,這讓我瘋狂。 SurveyQuestion可能有一個組織。以下是SurveyQuestion中的映射JPA 2查詢在OR子句上給出奇怪的行爲

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

組織有一個名爲key的字段。我創建一個具有以下JPQL

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

與查詢我只得到具有給定鍵的問題進行TypedNamedQuery。如果我從查詢中刪除q.organization.key =:organizationKey,那麼我可以得到所有沒有組織的組織,但是我不能在我的生活中讓它返回那些沒有組織或者沒有組織的組合給定的組織。

JPA2與EclipseLink提供程序。

+0

可以在問題發生,因爲`KEY`是JPA2關鍵字? http://wiki.eclipse.org/EclipseLink/Development/JPA_2.0/jpql#Feature_design – 2011-02-18 05:06:17

+0

hrm,或許,但如果我刪除IS NULL資格,那麼我可以得到所有那些具有給定組織的問題。我無法同時獲得兩者的組合。 – digitaljoel 2011-02-18 05:12:00

回答

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