2013-06-11 77 views
4

我有一個要求,我需要限制從某個表返回的特定標誌的記錄數和所有其他標誌值的記錄。在JPA查詢中的聯盟 - 來自同一個表

例如:contact-history表具有名爲IorM_flg的元素,其中可能的值爲'm'和'o'。

我只需要返回10個'o'記錄和'm'的所有記錄。

我正要爲此編寫一個帶有union的查詢。類似這樣的:

select ch from contact_history where ch.rownum <= 10 and ch.IorM_flg = 'o' 
Union All 
select ch from contact_history where ch.IorM_flg != 'o' 

這可能嗎? 請注意,它是一個JPA查詢。 (contact_history是對象名稱)

歡迎任何其他更好的建議!

+0

如果有可能,我會建議不要使用'JPA',因爲它是非常有限的,僅適用於比較簡單'O/R'映射。爲了獲得更大的靈活性,我建議使用'Apache dbUtils'或Spring的'JdbcTemplate'類似的東西。此外,還有'JOOQ',看起來不錯,但我沒有嘗試過更深。 – Yura

回答

1

不,這對於JPQL是不可能的,因爲它沒有UNION(ALL)。此外,無法通過rownum限制查詢字符串本身返回的行數,但這是通過setMaxResults完成的。

在許多情況下

  • 執行兩個查詢,
  • 限制在第一個與setMaxResults結果的數量,並且
  • 丟棄重複和在Java中

組合這兩個查詢的結果是可行的解決方案。