通过JPA随机选择行
在Mysql中,
SELECT id FROM table ORDER BY RANDOM() LIMIT 5
这个sql可以选择5个随机行。 如何通过JPA Query(Hibernate作为提供者,Mysql数据库)来做到这一点?
谢谢。
只有规范中定义的函数才能保证所有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提供商。
尝试预先计算随机数并使用预先计算的随机值构建JPQL / HQL / native查询。