Hibernate Criteria API:获取n个随机行 [英] Hibernate Criteria API: get n random rows

查看:87
本文介绍了Hibernate Criteria API:获取n个随机行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法弄清楚如何从条件实例中提取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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆