Java 通过JPA随机选择行

Java 通过JPA随机选择行,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,在Mysql中 SELECT id FROM table ORDER BY RANDOM() LIMIT 5 此sql可以选择5个随机行。如何通过JPA查询实现这一点(Hibernate作为提供者,Mysql数据库) 谢谢 只有规范中定义的功能才能保证所有JPA提供商支持,而RAND或RANDOM则不支持。所以我不认为您可以在JPQL中实现它 但是,这在HQL中是可能的(HQL中的order by子句被传递到数据库,因此您可以使用任何函数): 但是,我重申: 这可能不适用于其他数据库 这可能不

在Mysql中

SELECT id FROM table ORDER BY RANDOM() LIMIT 5
此sql可以选择5个随机行。如何通过JPA查询实现这一点(Hibernate作为提供者,Mysql数据库)


谢谢

只有规范中定义的功能才能保证所有JPA提供商支持,而
RAND
RANDOM
则不支持。所以我不认为您可以在JPQL中实现它

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

但是,我重申:

  • 这可能不适用于其他数据库
  • 这可能不适用于其他JPA提供商

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

    rand()或random()为每一行生成一个随机值,因此预先生成一个随机值将不起作用
    String query = "SELECT o.id FROM Order o ORDER BY random()";
    Query q = em.createQuery(query);
    q.setMaxResults(5);