为什么 hibernate 在 select 查询后不关闭它的会话?
Why would hibernate not close its session after select query?
当调用以下方法 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?
由于 getSessionFactory() 是唯一不受 hibernate 控制的部分,我检查了这个并发现我的实现不是线程安全的,并且在某些情况下为同一目标返回多个会话工厂实例,这导致增长会话数。
当调用以下方法 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?
由于 getSessionFactory() 是唯一不受 hibernate 控制的部分,我检查了这个并发现我的实现不是线程安全的,并且在某些情况下为同一目标返回多个会话工厂实例,这导致增长会话数。