2012-04-09 64 views

回答

37

只要第一次調用sf.getCurrentSession(),就會打開一個會話。這會創建一個全新的會話(如果不存在的話)或使用現有的會話(如果已經存在的話)。

在Tomcat中,這將會話與使用底層ThreadLocal對象創建的線程相關聯。但是,由於Tomcat使用線程池,完全有可能請求可能會收到一個會話已經與之關聯的線程,從而引入甚至不會創建全新會話的可能性。另一件事是你通過sf.getCurrentSession()獲得的會話被自動刷新和關閉。

另一方面,方法sf.openSession()會創建一個新會話,但不會嘗試將其與線程關聯。但請記住sf.openSession()引入了另一個順序,它希望用戶自己處理會話的關閉和刷新,而不是讓Hibernate爲我們自動執行會話。

sf.getCurrentSession()通常就足夠了。 sf.openSession()提供並促進了對會話存儲和管理的更高級別的管理。這當然是一種先進的選擇。

+1

這是否意味着如果我在tomcat中使用sf.getCurrentSession進行多線程 - 它將使用同一個會話?可以嗎? – Dejell 2015-06-09 17:32:56

相關問題