为什么 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 控制的部分,我检查了这个并发现我的实现不是线程安全的,并且在某些情况下为同一目标返回多个会话工厂实例,这导致增长会话数。