问题 通过JPA随机选择行


在Mysql中,

SELECT id FROM table ORDER BY RANDOM() LIMIT 5

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

谢谢。


5716
2018-03-17 00:15


起源



答案:


只有规范中定义的函数才能保证所有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);

但是,我再说一遍:

  1. 这可能不适用于其他数据库。
  2. 这可能不适用于其他JPA提供商。

11
2018-03-17 01:01





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


-1
2018-03-17 03:59



rand()或random()生成一个随机值 对于每一行 所以预先生成一个随机值是行不通的 - Noah Yetter


答案:


只有规范中定义的函数才能保证所有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);

但是,我再说一遍:

  1. 这可能不适用于其他数据库。
  2. 这可能不适用于其他JPA提供商。

11
2018-03-17 01:01





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


-1
2018-03-17 03:59



rand()或random()生成一个随机值 对于每一行 所以预先生成一个随机值是行不通的 - Noah Yetter