Прежде всего, имейте в виду, что в SQL не существует стандартного способа сделать это, каждый механизм базы данных использует свой собственный синтаксис 1 . С MySQL оператор SQL для получения 5 случайных строк будет:
SELECT column FROM table
ORDER BY RAND()
LIMIT 5
И вы могли бы написать этот запрос на HQL, потому что предложение order by в HQL передается в базу данных , поэтому вы можете использовать любую функцию.
String query = "SELECT e.attribute FROM MyEntity e ORDER BY RAND()";
Query q = em.createQuery(query);
q.setMaxResults(5);
Однако, в отличие от HQL, API Criteria в настоящее время не поддерживает ORDER BY Native SQL (см. HHH-2381 ), и в текущем состоянии вам придется создать подкласс Order
класс для реализации этой функции. Это выполнимо, обратитесь к проблеме Jira, но не доступно из коробки.
Так что, если вам действительно нужен этот запрос, я рекомендую использовать HQL. Просто имейте в виду, что он не будет портативным.
1 Другие читатели могут захотеть проверить сообщение SQL для выбора случайной строки из таблицы базы данных , чтобы узнать, как реализовать это с MySQL, PostgreSQL, Microsoft SQL Server, IBM DB2 и Oracle.