закрытие соединения и сессии - PullRequest
2 голосов
/ 01 марта 2012

У меня есть следующий код в блоке 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{}
}

В случаеОдно из двух решений, описанных выше, можете ли вы объяснить связь между сеансом и соединением, особенно через пул.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Во-первых, я хотел бы знать, почему вы хотите закрыть соединение в упомянутом коде?

Когда вы закрываете сеанс гибернации, убедитесь, что он не содержит никаких ссылок на соединение.В Hibernate 3.6.8 вызов делегируется в ConnectionManager.Проверьте метод closeConnection () .В Hibernate 4, когда вы вызываете session.connection(), вы получаете прокси, а в Hibernate 3 вы, скорее всего, получаете оболочку через соединение, если настроен пул соединений.

Таким образом, вы можете отладить session.connection() и session.close() и решить, хотите ли вы закрыть ссылку или нет. С предоставленной вами информацией любой ответ здесь будет чисто предположением.*

1 голос
/ 01 марта 2012

Второй подход достаточно.Если вы не установили hibernate.connection.release_mode , то используется значение по умолчанию (авто).Согласно документации:

По умолчанию соединение JDBC удерживается до тех пор, пока сеанс не будет явно закрыт или отключен.

В случае пула закрытие соединения означает, что соединение возвращаетсяв бассейн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...