首页 > 解决方案 > Session.getCurrentSession() 是否在不进行任何事务的情况下关闭?

问题描述

我正在尝试通过这样做来加载实体:

public void reloadRepository() {
        Session session = getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Hibernate.initialize(Repository.class);
    }

从这个堆栈溢出帖子(Hibernate openSession() vs getCurrentSession()),它说

当您调用 SessionFactory.getCurrentSession 时,如果它不存在,它将创建一个新会话,否则使用当前休眠上下文中的相同会话。它会在事务结束时自动刷新并关闭会话,因此您无需在外部执行此操作。

“交易结束”是什么意思?如果我不进行任何交易(猜测Hibernate.initialize()不进行交易),休眠会关闭此会话吗?

标签: javahibernate

解决方案


大概。

我猜你设置current_session_context_classthread(因为你正在使用beginTransaction)。这意味着,根据javadoc,会话仅在事务启动后可用,并在事务结束时自动销毁。

我不确定您所说的“不进行任何交易”是什么意思,您只是使用beginTransaction(). 一旦提交或回滚,事务将结束。即使您两者都不做,事务最终也会超时,这也算作结束事务。


推荐阅读