как остановить @query в jpa с предложением IN от упорядочения по id? - PullRequest
0 голосов
/ 23 апреля 2019

Мне нужно получить список записей из базы данных, передав 2 параметра, а именно: 1-й параметр - это тип объекта, а 2-й - это коллекция.

@ Query ("выберите cnt из содержимого cnt, где cnt.studio =? 1и cnt.id IN? 2 ")

public List getUpdatePlaylistTypeContent (Studio studio, List contentids);

Так, в моем вышеупомянутом коде предложение IN автоматически реализует порядок по id ascхотя я не упомянул. Я хочу остановить неявный порядок по выражению.

Я хочу, чтобы список результатов был таким же образом, как я передаю в объект списка (2-й параметр метода)

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Это не связано с JPA, попробуйте свой sql в вашей базе данных. Это бы показало вам тот же порядок. Проверьте тип вашей базы данных на предмет запрета автоматической сортировки;

Oracle

SELECT * FROM table where id IN (3,2,5,1,4) ORDER BY DECODE(id, 3,1,2,2,5,3,1,4) 
//you need the *,1,*,2,*,3,*,*

Mysql

select * from table where id IN (3,9,6) order by field(id,3,9,6)

Я не тестировал mysql, но он должен хорошо работать

0 голосов
/ 23 апреля 2019

Проверьте сгенерированный SQL (например, show_sql=true), и я уверен, что вы не увидите ни одного предложения ORDER BY.

Но если вы запустите тот же SQL в базе данных, результатыбудет упорядочен по идентификатору, если в столбце идентификатора есть индекс (например, первичный ключ) с настройками по умолчанию.

Например.https://www.postgresql.org/docs/11/indexes-ordering.html

С точки зрения базы данных, результат больше похож на набор, чем на список, поэтому вам нужно упорядочить его явно (или довольствоваться порядком индекса).Вы не можете полагаться на то, что вы помещаете в предложение where для сортировки результатов, поэтому вам потребуется дополнительная обработка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...