2013-04-20 51 views
0

我的代碼中似乎有一些Hibernate資源的「泄漏」。
僞代碼
對於每20,000記錄
使用標準用一個例子實體
查找記錄添加一個新的對象來收集關於實體
保存新對象到數據庫我的代碼中存在Hibernate資源泄漏

實體

問題
查找示例實體失敗,記錄12,764。如果我在測試用例中執行該查找,則會成功檢索它。如果我將輸入文件分成多個文件,每個文件有10,000條記錄,則會處理所有記錄。 這裏是我使用查找數據庫記錄

try { 
    // begin transaction 
    ses = Activator.getSession(); 
    ses.beginTransaction(); 

    // find the object 
    Criteria crit = getSession().createCriteria(getPersistentClass()); 
    Example example = Example.create(exampleInstance); 
    for (String exclude : excludeProperty) { 
     example.excludeProperty(exclude); 
    } 
    crit.add(example); 
    foundEntities = crit.list(); 

    for (T curT : foundEntities) { 
     this.initHibernateEntity((I) curT); 
    } 

    // commit transaction 
    ses.getTransaction().commit(); 
} catch // all exceptions 
finally { 
    if (ses != null && ses.isOpen()) { 
      ses.close(); 
     } 
    } 

我希望在哪裏,這可能是任何建議的代碼。

+0

某些堆棧跟蹤會有所幫助。 – 2013-04-20 16:27:45

回答

1

我懷疑是遇到頁面限制/併發鎖定問題 - 並且所有這些工作都在一個事務中執行。是否有任何理由不以較小的批次執行(如10,000-如您所述)並彙總結果?

Decent Resources

+0

感謝您的時間和鏈接到博客。 – 2013-04-20 17:39:51

0

一個StackOverflow上的最好的部分是讓問題上下足小張貼的努力。我經常在那個過程中找到答案,但沒有發佈過。

不幸的是,這次發佈後我發現自己的錯誤。這個問題是我糟糕的遺留數據和糟糕的日誌消息的組合。

我希望你沒有花太多時間看代碼。