Как выбрать 10 случайных записей в JPQL?
Я должен выбрать случайные 10 записей из пользовательской таблицы,
Ниже приведен SQL-запрос, который дает случайные 10 записей.
SELECT * FROM user_table ORDER BY RANDOM() LIMIT 10
Какова альтернатива JPQL для этого, есть ли у нас поддержка Random() для JPQL? Это хорошая практика для использования RANDOM()?
1 ответ
Решение
Я не знаю есть ли RANDOM
в JPA. В качестве альтернативного решения вы можете использовать этот трюк:
Query queryCount = em.createQuery("SELECT COUNT(u) FROM UserTable u");
Long size = (Long) queryCount.getSingleResult();
//I use this way of Java8, you can use the way you see it better to generate random indexes
int[] index = new Random().ints(0, size, 10).toArray();
Query query = em.createQuery("SELECT u FROM UserTable u WHERE INDEX(u) IN :indexs");
^^^^^^^^^^^^^^^^^^^
query.setParameter("indexs", index);
List<UserTable> listUsersRandom = query.getResultList();
Глобальная идея
Это решение основано на INDEX. Идея заключается в следующем:
- Первый запрос - найдите размер ваших объектов
- Создайте список индекса от 0 до
size
вашего списка - Второй запрос - выберите объекты, которые находятся в этом сгенерированном списке