请参阅此链接:
http://www.shredzone.de/cilla/page/53/how-to-fetch-a-random-entry-with-hibernate.html
Criterion restriction = yourRestrictions;
Object result = null; // will later contain a random entity
Criteria crit = session.createCriteria(Picture.class);
crit.add(restriction);
crit.setProjection(Projections.rowCount());
int count = ((Number) crit.uniqueResult()).intValue();
if (0 != count) {
int index = new Random().nextInt(count);
crit = session.createCriteria(Picture.class);
crit.add(restriction);
result = crit.setFirstResult(index).setMaxResults(1).uniqueResult();
}
这就是你想要的。保持Hibernate作为抽象层,同时仍然能够查询随机对象。不过,表演有点受挫。
虽然我一直在使用Hibernate,但我不知道一种更优雅、更易于使用的方法。我知道你应该把这个方法包装在一个门面后面。