2015-03-25 70 views
1

我在表中有下面的記錄。Hibernate條件來獲取記錄?

col1 col2 col3 
------------------------ 
    1  Abc IN 
    2  DEF CA 
    3  Xyz IN 
    4  Cae CA 
    5  Pty IN 
    6  Zwe DE 
    7  Zwf US 

這裏用戶發送像一個輸入INCADE等用戶輸入具有針對COL3要被映射。現在我需要查詢所有記錄從表中,但匹配用戶輸入(INCADE)記錄應首先出現在列表中,那麼所有其他記錄應該會出現。我如何使用hibernate標準來做到這一點?

如果用戶發送IN作爲輸入,我需要下面的結果。

1  Abc IN 
    5  Pty IN 
    3  Xyz IN 
    2  DEF CA 
    4  Cae CA 
    6  Zwe DE 
    7  Zwf US 
+0

正在Java端創建兩個查詢或排序選項(Hibernate不支持UNION ALL開箱即用)? – 2015-03-25 13:15:36

+0

感謝您的回答。我不能做兩個查詢,因爲我有分頁的概念,每次應用上面的邏輯只需要3行。 – user755806 2015-03-25 13:23:18

回答

1

你可以嘗試使用ORDER BY CASE構造:

order by case when <your entity>.col3 = :parameter then '0' else '1' end asc

+0

感謝您的回答。我使用的標準不是hql。是否有可能使用標準? – user755806 2015-03-25 13:59:10

+0

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/criteria/CriteriaBuilder.Case.html – 2015-03-25 14:07:44

0

有兩種方法來解決這個問題:
1.等於另一個與不等於所有的結果都爲單列表中創建兩個查詢之一。
2.如果您不想查詢數據庫兩次,那麼您必須在java中編寫算法,它將從列表中刪除您輸入的元素並將其添加到另一個列表,並在迭代後添加剩餘列表。

+0

感謝您的回答。我不能做兩個查詢,因爲我有分頁的概念,每次應用上面的邏輯只需要3行。 – user755806 2015-03-25 13:22:55

0

嘗試case ... when聲明:

select *, (case when col3=:input then '0' | col3 else col3 end) as sorter from table order by sorter asc 

不知道,如果它的工作原理,但如果這樣做,將是你想要什麼