Подтвердить что ты не робот

Случайные строки выбора через JPA

В Mysql,

SELECT id FROM table ORDER BY RANDOM() LIMIT 5

этот sql может выбрать 5 случайных строк. Как это сделать через JPA-запрос (Hibernate как поставщик, база данных Mysql)?

Спасибо.

4b9b3361

Ответ 1

Гарантируется, что все функции, определенные в спецификации, будут поддерживаться всеми поставщиками JPA, а RAND или RANDOM - нет. Поэтому я не думаю, что вы можете сделать это в JPQL.

Однако это было бы возможно в HQL (предложение order by в HQL передается в базу данных, поэтому вы можете использовать любую функцию):

String query = "SELECT o.id FROM Order o ORDER BY random()";
Query q = em.createQuery(query);
q.setMaxResults(5);

Но, повторяю:

  • Это может не работать с другой базой данных.
  • Это может не работать с другим поставщиком JPA.

Ответ 2

Попробуйте заранее рассчитать случайный случай и создайте свой запрос JPQL/HQL/native с предварительно вычисленным случайным значением.