我使用hibernate 4.2.4與JPA和layz加載在ManyToMany關聯。 對象A與@ManyToMany(targetEntity=B.class, fetch=FetchType.LAZY)
相關聯,並且相反。爲了從數據庫中,我調用下面(簡化)的代碼數據:休眠會話處理與延遲加載
try {
session = cutSessionFactory.openSession();
session.beginTransaction();
List<IBO> result = session.createQuery(query).list();
session.getTransaction().commit();
return result;
catch{...}
finally{
session.close;
}
本來我用來讓開放的連接,因爲如果我的應用程序需要做一些延遲加載,仍然需要該會話的第一個電話之後。但是,雖然這使我的應用程序在執行某些操作後被凍結,但我偶然採用了之前的策略。現在一切正常;沒有凍結,延遲加載沒有問題。 但如果我加載一個實體,它有一些兒童(即requieres延遲加載)的日誌說:其次
2013-09-25 09:35:30 - INFO - BasicResourcePool: A checked-out resource is overdue, and will be destroyed: [email protected]
2013-09-25 09:35:30 - INFO - BasicResourcePool: Logging the stack trace by which the overdue resource was checked-out
這是有道理的,Hibernate是不關閉會話
WARN - AbstractPersistentCollection: Unable to close temporary session used to load lazy collection associated to no session
(實際上我認爲有一個使用新會話的延遲加載的新請求),連接池可以識別出有一個未使用的會話。但最終,hibernate正在修復我的「糟糕的會話處理」。
那麼有沒有人知道更好的方式來處理與延遲加載使用的會話?
沒有ü找到一個回答?當你看到這個警告時,連接(來自c3p0)是否關閉?或者是否存在連接池泄漏? – OhadR