次のMySql依存コード(ORDER BY RAND())があります。私はそれのためのHibernate HQLの代替があるかどうかを知りたいです(adminは管理者としてのユーザを示すbooleanタグです)。これは動作するコードです:Hibernateを介してSQLデータベースからランダムオブジェクトを取得
public long getRandomAdmin() {
Session session = getSession();
Query selectQuery = session.createSQLQuery("SELECT user_id FROM users WHERE admin = '1' ORDER BY RAND()");
selectQuery.setMaxResults(1);
List<BigInteger> list = null;
try {
list = selectQuery.list();
} catch (HibernateException e) {
log.error(e);
throw SessionFactoryUtils.convertHibernateAccessException(e);
}
if (list.size() != 1) {
log.debug("getRandomAdmin didn't find any user");
return 0;
}
log.debug("found: " + list.get(0));
return list.get(0).longValue();
}
[Hibernate Criteria API:n個のランダムな行を取得する]の複製が可能です。(http://stackoverflow.com/questions/2810693/hibernate-criteria-api-get-n-random-rows) –