JPQL如何Select随机10条记录?
How to Select Random 10 records in JPQL?
我必须 select 从用户 table,
中随机抽取 10 条记录
下面是 SQL 查询,随机给出 10 条记录。
SELECT * FROM user_table ORDER BY RANDOM() LIMIT 10
JPQL 的替代方案是什么?我们是否支持 JPQL 的 Random()?使用 RANDOM() 是一种好习惯吗?
不知道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
之间的索引列表
- 第二个查询 - select 此生成列表中的对象
我必须 select 从用户 table,
中随机抽取 10 条记录下面是 SQL 查询,随机给出 10 条记录。
SELECT * FROM user_table ORDER BY RANDOM() LIMIT 10
JPQL 的替代方案是什么?我们是否支持 JPQL 的 Random()?使用 RANDOM() 是一种好习惯吗?
不知道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
之间的索引列表 - 第二个查询 - select 此生成列表中的对象