From 87b23285fa2cb6bb08f689e363e201c399e380b8 Mon Sep 17 00:00:00 2001 From: wanggang3 Date: Tue, 11 Nov 2025 15:27:02 +0800 Subject: [PATCH 1/6] Improve transaction state detection logic --- .../spring/transaction/SpringManagedTransaction.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java index 1b6cd04832..b7f69539cc 100644 --- a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java +++ b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java @@ -73,13 +73,18 @@ public Connection getConnection() throws SQLException { * 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. */ + private void openConnection() throws SQLException { + + boolean existingTransaction = TransactionSynchronizationManager.isActualTransactionActive(); + this.connection = DataSourceUtils.getConnection(this.dataSource); this.autoCommit = this.connection.getAutoCommit(); - this.isConnectionTransactional = DataSourceUtils.isConnectionTransactional(this.connection, this.dataSource); + + this.isConnectionTransactional = existingTransaction; LOGGER.debug(() -> "JDBC Connection [" + this.connection + "] will" - + (this.isConnectionTransactional ? " " : " not ") + "be managed by Spring"); + + (this.isConnectionTransactional ? " " : " not ") + "be managed by Spring"); } @Override From 6285590d9e73a24324b9a69395c6ddaad4b01aef Mon Sep 17 00:00:00 2001 From: wanggang3 Date: Wed, 12 Nov 2025 09:42:31 +0800 Subject: [PATCH 2/6] Test GPG signing --- test.txt | Bin 0 -> 12 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.txt diff --git a/test.txt b/test.txt new file mode 100644 index 0000000000000000000000000000000000000000..349d190f3dc5268aad7ce39e7dd68fdbc44703c5 GIT binary patch literal 12 TcmezWuY@6$p_rkBfr|kEBQOKV literal 0 HcmV?d00001 From 0426aa3182e49762330d640b30724d6fe6144b58 Mon Sep 17 00:00:00 2001 From: wanggang3 Date: Wed, 12 Nov 2025 09:43:12 +0800 Subject: [PATCH 3/6] Improve transaction state detection logic --- .../mybatis/spring/transaction/SpringManagedTransaction.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java index 1822145dff..3b6f6f9d22 100644 --- a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java +++ b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java @@ -71,7 +71,7 @@ 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); @@ -84,7 +84,6 @@ private void openConnection() throws SQLException { LOGGER.debug(() -> "JDBC Connection [" + this.connection + "] will" + (this.isConnectionTransactional ? " " : " not ") + "be managed by Spring"); } - @Override public void commit() throws SQLException { if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) { From 42304487c049294a3deedd4d2c0cbc86bfeca161 Mon Sep 17 00:00:00 2001 From: wanggang3 Date: Wed, 12 Nov 2025 15:23:37 +0800 Subject: [PATCH 4/6] Improve transaction state detection logic --- test.txt | Bin 12 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test.txt diff --git a/test.txt b/test.txt deleted file mode 100644 index 349d190f3dc5268aad7ce39e7dd68fdbc44703c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12 TcmezWuY@6$p_rkBfr|kEBQOKV From 6e572b4e1c407f08b08a1d16ff5f9865c0f82a0e Mon Sep 17 00:00:00 2001 From: Jeremy Landis Date: Thu, 21 May 2026 17:55:35 -0400 Subject: [PATCH 5/6] Correct comment on autocommit behavior Fix comment formatting in openConnection method. --- .../mybatis/spring/transaction/SpringManagedTransaction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java index 3b6f6f9d22..7483c37f5c 100644 --- a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java +++ b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java @@ -71,7 +71,7 @@ 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.:q + * false and will always call commit/rollback so we need to no-op that calls. */ private void openConnection() throws SQLException { this.connection = DataSourceUtils.getConnection(this.dataSource); From 93a4bab45e0198f86afeb11067aee712ba037196 Mon Sep 17 00:00:00 2001 From: Jeremy Landis Date: Thu, 21 May 2026 17:55:58 -0400 Subject: [PATCH 6/6] Fix logging statement in SpringManagedTransaction --- .../org/mybatis/spring/transaction/SpringManagedTransaction.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java index 7483c37f5c..1822145dff 100644 --- a/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java +++ b/src/main/java/org/mybatis/spring/transaction/SpringManagedTransaction.java @@ -84,6 +84,7 @@ private void openConnection() throws SQLException { LOGGER.debug(() -> "JDBC Connection [" + this.connection + "] will" + (this.isConnectionTransactional ? " " : " not ") + "be managed by Spring"); } + @Override public void commit() throws SQLException { if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) {