diff --git a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java index 1b6cd04832..3b6f6f9d22 100644 --- a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java +++ b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java @@ -71,17 +71,19 @@ public Connection getConnection() throws SQLException { * connection or let it to Spring. *
* It also reads autocommit setting because when using Spring Transaction MyBatis thinks that autocommit is always - * false and will always call commit/rollback so we need to no-op that calls. + * false and will always call commit/rollback so we need to no-op that calls.:q */ private void openConnection() throws SQLException { this.connection = DataSourceUtils.getConnection(this.dataSource); this.autoCommit = this.connection.getAutoCommit(); - this.isConnectionTransactional = DataSourceUtils.isConnectionTransactional(this.connection, this.dataSource); + + boolean isInActiveTransaction = TransactionSynchronizationManager.isActualTransactionActive(); + this.isConnectionTransactional = isInActiveTransaction && + DataSourceUtils.isConnectionTransactional(this.connection, this.dataSource); LOGGER.debug(() -> "JDBC Connection [" + this.connection + "] will" - + (this.isConnectionTransactional ? " " : " not ") + "be managed by Spring"); + + (this.isConnectionTransactional ? " " : " not ") + "be managed by Spring"); } - @Override public void commit() throws SQLException { if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) {