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

在Mysql中,

SELECT id FROM table ORDER BY RANDOM() LIMIT 5

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

谢谢。

【问题讨论】:

    标签: java mysql hibernate jpa


    【解决方案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);
    

    但是,我再说一遍:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • rand() 或 random() 为每一行生成一个随机值 因此预先生成单个随机值将不起作用
      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多