Hibernate Criteria API:获取n个随机行 [英] Hibernate Criteria API: get n random rows
问题描述
我无法弄清楚如何从条件实例中提取n个随机行:
Criteria criteria = session.createCriteria (Table.class);
criteria.add(Restrictions.eq('fieldVariable',anyValue));
...
然后呢?我无法使用Criteria API找到任何文档
这是否意味着我应该使用HQL而不是?
Thanx !
编辑:我得到的行数:
int max = criteria.setProjecxtion(Projections.rowCount())。uniqueResult();
如何获取n个索引介于0和max之间的随机行?
Thx又一次!
实际上,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';所以为了使它的效果无效,
我们将添加一个虚拟条件并注入我们的rand()函数。
I can't figure out how to fetch n random rows from a criteria instance:
Criteria criteria = session.createCriteria(Table.class);
criteria.add(Restrictions.eq('fieldVariable', anyValue));
...
Then what? I can't find any doc with Criteria API
Does it mean I should use HQL instead?
Thanx!
EDIT: I get the number of rows by:
int max = criteria.setProjecxtion(Projections.rowCount()).uniqueResult();
How do I fetch n random rows with indexes between 0 and max? Thx again!
Actually it is possible with Criteria and a little bit of tweaking. Here is how:
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();
any Restrictions.sqlRestriction will add keyword 'and'; so to nullify its effect, we shall add a dummy condition and inject our rand() function.
这篇关于Hibernate Criteria API:获取n个随机行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!