【发布时间】:2017-03-20 17:33:43
【问题描述】:
我使用的是 hibernate 3.6.3 最终版本(我知道它已经很老了,但在我目前正在处理的这个项目中,现在就是这样)。
我在进行连接和分页时遇到问题,以便我在结果中复制一条记录,这是由休眠引起的。
这是我的代码:
public Page<T> findByCriteriaPaginated(PageParams params, Criteria countCriteria, Criteria listCriteria, String[] joins) {
Page<T> page = new Page<T>(params);
// count criteria
countCriteria.setProjection(Projections.rowCount());
page.setTotalCount(((Long) countCriteria.uniqueResult()).intValue());
// fetch criteria
listCriteria.setFirstResult(params.getFirstResultIdx());
listCriteria.setMaxResults(params.getPageSize());
if (params.getOrdering() != null && params.getOrdering().getSize() > 0) {
for (Iterator<String> it = params.getOrdering().getKeyIterator(); it.hasNext();) {
String key = it.next();
if (params.getOrdering().isAscending(key)) {
listCriteria.addOrder(Order.asc(key));
} else {
listCriteria.addOrder(Order.desc(key));
}
}
}
if (joins != null && joins.length > 0) {
for (String s : joins) {
listCriteria.setFetchMode(s, FetchMode.JOIN);
}
}
page.setResults(listCriteria.list());
return page;
}
当我点击生成的查询并在数据库服务器上运行它时,我没有这个重复记录。但是调试我的代码,listCriteria.list() 返回带有重复的数据集。另外,当我注释掉这两行listCriteria.setFirstResult(params.getFirstResultIdx());
listCriteria.setMaxResults(params.getPageSize());,那么listCriteria.list() 没有重复,就可以了。
因此,这向我表明,分页和我所拥有的其他标准(连接和排序)存在一些问题。
有人知道如何解决这个问题吗?这是休眠错误吗?将休眠版本增加到最新(5.2.9.Final)有帮助吗?这么大的版本升级有什么潜在的问题吗?
感谢您提供任何帮助。
错别字
【问题讨论】: