如何在JPQL中随机选择10条记录?

时间:2018-06-21 14:03:53

标签: java spring-boot jpa spring-data-jpa jpql

我必须从用户表中随机选择10条记录,

下面是提供10条随机记录的SQL查询。

 SELECT * FROM user_table ORDER BY RANDOM() LIMIT 10

什么是JPQL替代品,我们对JPQL是否支持Random()?使用RANDOM()是一个好习惯吗?

1 个答案:

答案 0 :(得分:2)

我不知道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之间的索引列表
  • 第二个查询-选择此生成列表中的对象