我在DAO中使用以下方法使用hibernate查询DB(oracle),每次查询批量加载50行数据。 batchSize设置为50,batchNumber设置为1,SortOrder对象的isAscending设置为true,columnName等于行中的一列。
出于某种原因,在前50个结果中,跳过35-40行,然后从第2个查询的第51行开始,我得到重复的结果。
评论有关SortOrder的逻辑修复了重复的问题,但我不明白为什么我会得到重复的结果.....任何帮助将不胜感激。
public List<Cats> getCatsList(CatQueryCriteria params)
{
List<Cat> cats= new ArrayList<Cat>();
Session sess = (Session) em.getDelegate();
Criteria criteria = sess.createCriteria(Cat.class, "cat");
//Returns list of catIDs
List<Long> catIDList = catInfo.returnCatIDs(sess, params);
//Eliminate duplicates
criteria.setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE);
if(catIDList.size() != 0)
{
//Add criteria
criteria.add(Restrictions.in("cat.catID", catIDList));
//Add in Sort Order
if(params.getSortOrder() != null)
{
for (SortOrder order: params.getSortOrder())
{
if(order.isAscending())
{
criteria.addOrder(Order.asc(order.getColumnName()));
}
else
{
criteria.addOrder(Order.desc(order.getColumnName()));
}
}
}
//Batch loading
if(params.getBatchSize() > 0)
{
criteria.setMaxResults(params.getBatchSize());
if (params.getBatchNumber() > 0)
{
criteria.setFirstResult((params.getBatchNumber()) *params.getBatchSize());
}
}
//Execute query
cats = criteria.list();
}
return cats;
}
答案 0 :(得分:0)
这是一个复杂的问题。 请检查此问题:
Hibernate - distinct results with pagination
同样对于criteria.setFirstResult(),索引从0开始。因此,如果将index设置为1,您将在第二页中看到结果