java - hibernate 标准 API : get n random rows

标签 java sql hibernate mysql random

我不知道如何从条件实例中获取 n 个随机行:

Criteria criteria = session.createCriteria(Table.class);
criteria.add(Restrictions.eq('fieldVariable', anyValue));
...

然后呢?我找不到任何带有 Criteria API 的文档

这是否意味着我应该改用 HQL?

谢谢!

编辑:我通过以下方式获得行数:

int max = criteria.setProjecxtion(Projections.rowCount()).uniqueResult();

如何获取索引在 0 到最大值之间的 n 个随机行? 再次感谢!

最佳答案

实际上可以通过 Criteria 和一些调整来实现。方法如下:

Criteria criteria = session.createCriteria(Table.class);
criteria.add(Restrictions.eq("fieldVariable", anyValue));
criteria.add(Restrictions.sqlRestriction("1=1 order by rand()"));
criteria.setMaxResults(5);
return criteria.list();

任何 Restrictions.sqlRestriction 都会添加关键字'and';所以要取消它的效果, 我们将添加一个虚拟条件并注入(inject)我们的 rand() 函数。

关于java - hibernate 标准 API : get n random rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810693/

相关文章:

java - Android/java - 如何执行该循环等待执行操作

java - Dropwizard 通过代码进行日志记录

mysql - 如何优化以下sql查询?

sql - 如何将SELECT DISTINCT ON转换为knex.js

mysql - 连接两个表并选择第二个表中不存在的行 1

hibernate - 在加载域之前修改gorm映射

java - DropWizard 认证领域

java - 在 Java 中模拟 C++ 枚举

java - JPA如何通过只读取外键值来建立JoinTable关系

java - Spring -> org.hibernate.HibernateException : Illegal attempt to associate a collection with two open sessions