2015-03-25 2 views
1

У меня ниже записей в таблице.Спящий режим для получения записей?

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

Здесь пользователь посылает вход как В или CA или ДЕ т.д. Пользовательский ввод должен быть отображен против col3. Теперь мне нужно запросить все записи из таблицы, но записи, соответствующие данные, введенные пользователем (IN или CA или DE) должен появиться первый в списке, то должны появиться все другие записи. Как это сделать, используя критерии спящего режима?

Мне нужны результаты ниже заказа, если пользователь отправляет 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 из коробки)? –

+0

Спасибо за ваш ответ. Я не могу сделать два запроса, потому что у меня есть концепция разбивки на страницы, и я должен принимать только 3 строки каждый раз, применяя выше логики. – user755806

ответ

1

Вы можете попробовать использовать ORDER BY CASE-конструкции:

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

+0

Спасибо за ваш ответ. Я использую критерии не hql. Можно ли использовать критерии? – user755806

+0

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/criteria/CriteriaBuilder.Case.html –

0

Есть два способа решения этой проблемы:
1. Создайте два запроса один с равным другому с не равны, и все результаты для обоих в одном списке.
2. Если вы не хотите дважды запрашивать базу данных, вам нужно написать algo в java, который удалит элементы для ввода из списка и добавит его в другой список, а после итерации добавьте оставшийся список в конец.

+0

Спасибо за ваш ответ. Я не могу сделать два запроса, потому что у меня есть концепция разбивки на страницы, и я должен принимать только 3 строки каждый раз, применяя выше логики. – user755806

0

попробовать case ... when заявления:

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

не уверен, если это работает, но если он делает это будет именно то, что вы хотите

Смежные вопросы