2011-12-15 110 views
1

休眠會話打開時(sessionFactory.openSession())可能會關閉。沒關係。如果錯過了關閉用於檢索數據(不保存,更新或刪除)應用程序中任何位置的打開會話,如何關閉打開的會話(如果存在)?關閉打開休眠會話(如果存在)

(假設當一個JFrame已關閉,如果打開的會話可用,它們必須關閉。關閉會話可以通過逐個查看代碼來完成,但我的意思是在這裏沒有檢查代碼,是在那裏任何方式來關閉會議,這是錯過了一段代碼關閉)。

回答

3

爲什麼不在數據庫操作完成時關閉會話? 我的意思是,在DAO類中你打開會話執行數據庫操作。並在最後阻止,關閉你的會話。 您可以關閉喜歡會話:

finally { 
    if(session!=null){ 
     session.close(); 
    } 
} 

OR

你可以在關閉JFrame的事件中使用

Session sess = sessionFactory.getCurrentSession(); 

並關閉會話當前會話。

我從this link

以下行這裏的主力合約是會話實例的創建。通常, 應用程序具有一個SessionFactory實例,並且服務於客戶端請求的線程 從該工廠獲取Session實例。 SessionFactory的內部狀態是不可變的。一旦創建了這個內部狀態 被設置。該內部狀態包括關於對象/關係映射的元數據的所有 。 執行者必須是線程安全的。

我們有責任在完成操作或交易時關閉會話。當我們關閉sessionfactory時,所有資源(連接池等)都會正確釋放。

+1

非常感謝您的回答。我的意思是,如果關閉會話被忘記爲一個錯誤,並且應用程序運行時會存在更多打開的會話,然後可能會發生內存浪費。在這種情況下,如何關閉或看到有任何會話打開? – 2011-12-16 10:28:35