Случайный выбор строк через JPA - PullRequest
11 голосов
/ 17 марта 2010

В Mysql,

SELECT id FROM table ORDER BY RANDOM() LIMIT 5

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

Спасибо.

Ответы [ 2 ]

11 голосов
/ 17 марта 2010

Все функции 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);

Но, повторюсь:

  1. Это может не работать с другой базой данных.
  2. Это может не работать с другим провайдером JPA.
0 голосов
/ 17 марта 2010

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

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