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

Posted

技术标签:

【中文标题】如何在 JPQL 中选择随机 10 条记录?【英文标题】:How to Select Random 10 records in JPQL? 【发布时间】:2018-11-30 21:40:04 【问题描述】:

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

下面是给出随机 10 条记录的 SQL 查询。

 SELECT * FROM user_table ORDER BY RANDOM() LIMIT 10

对此的 JPQL 替代方案是什么,我们有 Random() 对 JPQL 的支持吗?使用 RANDOM() 是一个好习惯吗?

【问题讨论】:

为什么不查阅 JPQL 参考文档以了解哪些功能可用? datanucleus.org:15080/products/accessplatform_5_1/jpa/… 【参考方案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 之间的索引列表 第二次查询 - 选择此生成列表中的对象

【讨论】:

以上是关于如何在 JPQL 中选择随机 10 条记录?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中,如何从数据库中选择 100 条随机记录? [复制]

JPQL/HSQL 更新有限制?

如何为所有 3 个项目都存在于选择中的 3 个项目选择 10 个随机记录

MySQL - 选择顶部后如何选择随机?

如何在 Redshift 中仅输出随机 xx% 的查询输出记录?

如何在jpql中选择列表元素的属性