diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java index b4bd7b714..f61f03699 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java @@ -941,11 +941,13 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { */ private void connectionEndForQueryOnly() { try { + withEachCallback(TransactionCallback::preCommit); if (onQueryOnly == OnQueryOnly.COMMIT) { performCommit(); } else { performRollback(); } + withEachCallback(TransactionCallback::postCommit); } catch (SQLException e) { logger.error("Error when ending a query only transaction via " + onQueryOnly, e); } diff --git a/ebean-core/src/test/java/org/tests/transaction/TestTransactionCallback.java b/ebean-core/src/test/java/org/tests/transaction/TestTransactionCallback.java index 44e91f601..75ca4d567 100644 --- a/ebean-core/src/test/java/org/tests/transaction/TestTransactionCallback.java +++ b/ebean-core/src/test/java/org/tests/transaction/TestTransactionCallback.java @@ -1,10 +1,6 @@ package org.tests.transaction; -import io.ebean.BaseTestCase; -import io.ebean.Ebean; -import io.ebean.EbeanServer; -import io.ebean.Transaction; -import io.ebean.TransactionCallbackAdapter; +import io.ebean.*; import org.junit.Test; import javax.persistence.PersistenceException; @@ -50,8 +46,32 @@ public class TestTransactionCallback extends BaseTestCase { assertEquals(1, countPostCommit); assertEquals(1, countPreRollback); assertEquals(1, countPostRollback); + } + @Test + public void test_commit_whenNoDbWrite() { + try (Transaction txn = DB.beginTransaction()) { + DB.register(new MyCallback()); + txn.commit(); + } + assertEquals(1, countPreCommit); + assertEquals(1, countPostCommit); + assertEquals(0, countPreRollback); + assertEquals(0, countPostRollback); + } + + @Test + public void test_rollback_whenNoDbWrite() { + try (Transaction txn = DB.beginTransaction()) { + DB.register(new MyCallback()); + txn.rollback(); + } + + assertEquals(0, countPreCommit); + assertEquals(0, countPostCommit); + assertEquals(1, countPreRollback); + assertEquals(1, countPostRollback); } @Test(expected = PersistenceException.class)