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 此生成列表中的对象