2012-03-01 118 views
2

我在Try集團下面的代碼:連接和會話結束

// Session variable 
Session session = null; 
// Connection variable 
Connection conn = null; 

try { 
... 
// Get hibernate session 
session = getHibernateTemplate().getSessionFactory().openSession(); 
// Get connection frojm session 
conn = session.connection(); 
... 
}catch{ 
... 
} 

而在finally集團我想與集團數據庫的連接的所有相關對象。

會議閉幕讓我們關閉連接?或者我們必須先關閉連接? 解決方案1:

finally{ 
try{if (conn!=null) conn.close();}ctach{} 
try{if (session!=null) session.close();}catch{} 
} 

解決方案2:

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

在之前的兩種解決方案之一的情況下,你能解釋專門通過會話和連接之間的關係泳池的方式。

+0

這是Java的嗎?你沒有把它標記爲這樣。 – Perry 2012-03-01 17:08:15

+0

是的,當然,我已經添加了Java標記 – kaissun 2012-03-02 07:42:32

回答

1

第二種方法就夠了。如果您尚未設置hibernate.connection.release_mode,則使用默認(自動)。根據文檔:

默認情況下,將保持JDBC連接,直到會話明確爲 關閉或斷開連接。

在池的情況下,關閉連接意味着連接返回池。

1

首先,我想知道爲什麼要在提到的代碼中關閉連接?

當你關閉一個會話時,hibernate會確保它不包含對連接的任何引用。在Hibernate 3.6.8中,該調用委託給ConnectionManager。檢查closeConnection() method。在Hibernate 4中,當你調用session.connection()時,你得到的是一個代理,而在hibernate 3中,如果連接池已配置,則很可能會通過連接進行封裝。

因此,您的選擇是調試session.connection()session.close(),並決定是否要關閉該接受或不接受。根據您提供的信息,這裏的任何答案都是純粹的假設。