通过 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 提供者支持,RAND
或 RANDOM
不支持。所以我认为你不能在 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 随机选择行的主要内容,如果未能解决你的问题,请参考以下文章