通过 JPA 随机选择行

Posted

技术标签:

【中文标题】通过 JPA 随机选择行【英文标题】:Random select rows via JPA 【发布时间】:2011-01-28 09:11:55 【问题描述】:

mysql中,

SELECT id FROM table ORDER BY RANDOM() LIMIT 5

这个 sql 可以随机选择 5 行。如何通过 JPA Query(Hibernate 作为提供者,Mysql 数据库)来做到这一点?

谢谢。

【问题讨论】:

【参考方案1】:

只有规范中定义的功能保证被所有 JPA 提供者支持,RANDRANDOM 不支持。所以我认为你不能在 JPQL 中做到这一点。

但是,在 HQL 中是可能的(HQL 中的 order by 子句传递到数据库,因此您可以使用任何函数):

String query = "SELECT o.id FROM Order o ORDER BY random()";
Query q = em.createQuery(query);
q.setMaxResults(5);

但是,我再说一遍:

    这可能不适用于其他数据库。 这可能不适用于其他 JPA 提供程序。

【讨论】:

【参考方案2】:

尝试预先计算随机数并使用预先计算的随机值构建您的 JPQL/HQL/本机查询。

【讨论】:

rand() 或 random() 为每一行生成一个随机值 因此预先生成单个随机值将不起作用

以上是关于通过 JPA 随机选择行的主要内容,如果未能解决你的问题,请参考以下文章

对随机矩阵的所有行进行快速随机加权选择

使用 Spring 数据 JPA 获取随机记录

如何在 SQL 中随机选择行?

从表中随机选择行 - Python Pandas 读取 SQL

为 SQL 连接选择单个(随机)行

从多维 Numpy 数组行中选择随机窗口