2016-12-07 43 views
0

我需要幫助創建一個JPQL查詢出本地查詢有或條件以及其他字段。請讓我們知道它是否仍然不被JPA支持。使用Spring Data JPA,如何在同一個字段上創建具有多個ORed條件的查詢?

樣品原生查詢:

select * from EMP where (EMP_FLAG is NULL or EMP_FLAG is 'Y') and EMP_ID in (1,2,3); 

現在使用JPQL(Java持久化查詢語言),我已經寫了下面的使用在建造查詢源

findByEmpIdInAndEmpFlagIsNotNull(List<Long> ids); 

但如何把支票EMP_FLAG ='Y'?

注意**我不打算使用@Query註釋添加查詢。 (該解決方案的瞭解 )

Spring版本:4.2, JAVA:1.7

+0

請指點,如果它是不可能的使用,建立查詢在此特定情形..我不只是在尋找自動查詢,我想了解JPQL爲我們提供的可能性。 – Dish

回答

1

選擇您找到最適合您的方法名稱,並與

@Query("select e from Employee e where (e.empFlag is null of e.empFlag = 'Y') and e.empId in ?1") 
+0

我知道這個解決方案,但我願意使用類似findBy的東西,我不必寫@Query的東西。 – Dish

+0

不應濫用方法名稱生成的自動查詢。它們對於findByName()這類簡單的事情來說非常方便,但對於你所擁有的東西而言,它們比僅僅自己寫查詢更難編寫,它們會導致可怕的漫長而神祕的方法名稱,並且必須更改這些方法名稱只要實際標準發生變化(例如,如果您開始使用布爾字段而不是Y/N)。 –

+0

我同意建議方法名稱應該改變。但是使用自動查詢有什麼問題?它有幾個好處。代碼看起來更加清晰,即使某些數據庫在後端配置發生變化,也不會出現故障。如果它是一個布爾型的字段,無論如何事情在Native查詢中也會發生變化,所以在代碼中做出更改的努力如果不是更少,那麼它們仍然是相等的。 – Dish

3

你可以對其進行批註做這樣的

@Query("select e from EMP e where (e.empFlag is null of e.empFlag ='Y')and in :ids") 
findByEmpIdIn(@Param("ids") List<Long> ids); 
相關問題