1
我使用休眠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;
}
當我打的生成和DB服務器上運行的查詢,那麼我就沒有這個重複記錄。但是調試我的代碼,listCriteria.list()
返回數據集重複。另外當我註釋掉這兩行listCriteria.setFirstResult(params.getFirstResultIdx()); listCriteria.setMaxResults(params.getPageSize());
,那麼listCriteria.list()
沒有重複,沒關係。
所以,這表明我有分頁問題和其他標準問題(連接和排序)。
有沒有人有想法如何解決這個問題?這是休眠錯誤嗎?將增加休眠版本到最新版本(5.2.9.Final)有幫助嗎?這種大版本升級是否有任何潛在的問題?
謝謝你的幫助。
mismas
重複的行位於不同的頁面上。我試圖手動執行SQL查詢,結果中沒有重複的記錄。在這種情況下訂購也給出。你認爲這是冬眠的bug嗎? – mismas
謝謝!問題在於訂購畢竟。並不是說它缺少了,而是模棱兩可。我通過創建的日期進行了排序,該日期是oracle日期數據類型,db中的數據具有相同的創建日期值。所以排序並不明確。在通過id添加排序之後(以及創建日期),一切都奏效了。再次感謝你! – mismas