當呼叫以下方法 10 次時,資料庫上有 11 個打開的會話:
public void readHsql() {
SessionFactory sessionFactory = getSessionFactory();
if (sessionFactory != null) {
try (Session session = sessionFactory.openSession()) {
String queryString = "select r from Role r where r.name='test'";
Query<Role> query = session.createQuery(queryString, Role.class);
List<Role> list = query.getResultList();
} catch (Exception e) {
System.err.println("Error");
}
} else {
System.err.println("Error");
}
}
在呼叫回圈的每次迭代中,還有一個會話。停止 java 應用程式時,會話再次消失。為什么離開try-catch-block時會話沒有關閉,我認為這應該由Autoclosable完成?也呼叫 .close() 或 .disconnect() 似乎并沒有改變任何東西。
使用hibernate 5.4.12.Final有什么要配置或任何注釋來避免這種情況嗎?
uj5u.com熱心網友回復:
由于 getSessionFactory() 是唯一不受休眠控制的部分,因此我檢查了這一部分,發現我的實作不是執行緒安全的,并且在某些情況下為同一目標回傳了多個會話工廠實體,這導致會話數量不斷增加。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476391.html
