【问题标题】:How to Select Random 10 records in JPQL?如何在 JPQL 中选择随机 10 条记录?
【发布时间】:2018-11-30 21:40:04
【问题描述】:
我必须从用户表中随机选择 10 条记录,
下面是给出随机 10 条记录的 SQL 查询。
SELECT * FROM user_table ORDER BY RANDOM() LIMIT 10
对此的 JPQL 替代方案是什么,我们有 Random() 对 JPQL 的支持吗?使用 RANDOM() 是一个好习惯吗?
【问题讨论】:
标签:
java
spring-boot
jpa
spring-data-jpa
jpql
【解决方案1】:
不知道JPA里有没有RANDOM。作为替代解决方案,您可以使用此技巧:
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 之间的索引列表
- 第二次查询 - 选择此生成列表中的对象