您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

什么时候使用Spring JPA(休眠)实体管理器将连接返回到连接池?

什么时候使用Spring JPA(休眠)实体管理器将连接返回到连接池?

一点也不复杂。

首先,您需要了解Spring事务管理器只是事务管理的抽象。在您的情况下,实际的事务发生在JDBC连接级别。

Aspect @Transactional拦截所有服务方法调用TransactionInterceptor

TransactionIntreceptor委托事务管理当前的配置 AbstractPlatformTransactionManager实现(JpaTransactionManager你的情况)。

JpaTransactionManager 会将当前正在运行的Spring事务绑定到EntityManager,因此参与当前事务的所有DAO共享相同的持久性上下文。

JpaTransactionManager只需使用EntityManagerTransaction API来控制交易即可:

        EntityTransaction tx = txObject.getEntityManagerHolder().getEntityManager().getTransaction();
     tx.commit();

JPA Transaction API只是将调用委托给基础的JDBC Connection提交/回滚方法

transactionCoordinator().getTransactionContext().managedClose();

这会触发hibernate会话(实体管理器)关闭

因此,也会触发基础JDBC连接的关闭

jdbcCoordinator.close();

Hibernate具有逻辑JDBC连接句柄:

        @Override
    public Connection close() {
        LOG.tracev( "Closing JDBC container [{0}]", this );
        if ( currentBatch != null ) {
        LOG.closingUnreleasedBatch();
            currentBatch.release();
        }
        cleanup();
        return logicalConnection.close();
    }
        @Override
    public void closeConnection(Connection connection) throws sqlException {
         connection.close();
    }

您还可以找到关于此主题的更多细节,以及为什么需要设置hibernate.connection.provider_disables_autocommit与Hibernate属性这篇文章

Java 2022/1/1 18:14:48 有579人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶