有没有人有HQL查询如何从数据库中获得10个随机唯一对象的列表?如何使用Hibernate获取10个随机唯一对象的列表?
应该在没有应用程序数据库来完成。我想得到比我现在的解决方案更好的性能,这些解决方案几乎可以让10个请求获得列表。
有没有人有HQL查询如何从数据库中获得10个随机唯一对象的列表?如何使用Hibernate获取10个随机唯一对象的列表?
应该在没有应用程序数据库来完成。我想得到比我现在的解决方案更好的性能,这些解决方案几乎可以让10个请求获得列表。
我以任何方式不HQL专家,但在SQL你会做这与
select ... order by RANDOM() limit 10
有一点谷歌搜索的
所以,我想通了如何做limit bit和random bit。
请随时评论和发布改进。这是我的了:
public List<Item> getRandomTenItems() {
DetachedCriteria criteria = DetachedCriteria.forClass(Item.class).addOrder(Order.desc("id"));
List<Item> idlist = new LinkedList<Item>(getHibernateTemplate().findByCriteria(criteria, 0, 1));
long max = idlist.get(0).getId();
criteria = DetachedCriteria.forClass(Item.class).addOrder(Order.asc("id"));
idlist = new LinkedList<Item>(getHibernateTemplate().findByCriteria(criteria, 0, 1));
long min = idlist.get(0).getId();
List<Item> rtn = new LinkedList<Item>();
HashSet<Long> ids = new HashSet<Long>();
int i=0;
while(i<10) {
long itemId = RandomUtils.rand(min, max);
if(ids.contains(itemId)) continue;
List<Item> list = new LinkedList<Item>(getHibernateTemplate().findByNamedParam(
"from Item where archived = false and available = true and id = :itemId", "itemId", itemId));
if(!list.isEmpty()){
rtn.add(list.get(0));
ids.add(list.get(0).getId());
i++;
}
}
return rtn;
}
HQL会是这样的:
session.createQuery("select o from Object o order by rand()")
.setMaxResults(10)
.list()
兰特()通过在数据库中,以便与任何功能的数据库使用替换此通过。
请在您的文章或不使用签名或标语(http://stackoverflow.com/faq#signatures)。 – meagar 2010-12-11 05:44:40