【发布时间】:2014-06-02 23:56:13
【问题描述】:
我的 DAO 中有以下方法来使用休眠查询数据库(oracle),每个查询批量加载 50 行数据。 batchSize 设置为 50,batchNumber 设置为 1,SortOrder 对象的 isAscending 设置为 true,columnName 等于行中的列之一。
由于某些原因,在前 50 个结果行中,第 35-40 行被跳过,然后我从第二个查询的第 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;
}
【问题讨论】: