diff --git a/src/test/java/org/tests/transaction/TestSavepoint.java b/src/test/java/org/tests/transaction/TestSavepoint.java new file mode 100644 index 000000000..5a159b333 --- /dev/null +++ b/src/test/java/org/tests/transaction/TestSavepoint.java @@ -0,0 +1,65 @@ +package org.tests.transaction; + +import io.ebean.BaseTestCase; +import io.ebean.Ebean; +import io.ebean.Transaction; +import io.ebean.annotation.ForPlatform; +import io.ebean.annotation.Platform; +import org.junit.Test; +import org.tests.model.basic.EBasicVer; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Savepoint; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TestSavepoint extends BaseTestCase { + + @ForPlatform({Platform.POSTGRES, Platform.H2}) + @Test + public void test() throws SQLException { + + EBasicVer basicVer = new EBasicVer("save1"); + basicVer.setOther("other1"); + Ebean.save(basicVer); + + try (Transaction transaction = Ebean.beginTransaction()) { + + Connection connection = transaction.getConnection(); + Savepoint savepoint = connection.setSavepoint(); + + basicVer.setOther("changeOther"); + Ebean.save(basicVer); + + connection.rollback(savepoint); + transaction.commit(); + } + + EBasicVer found = Ebean.find(EBasicVer.class, basicVer.getId()); + assertThat(found.getOther()).isEqualTo("other1"); + + } + + @ForPlatform({Platform.POSTGRES, Platform.H2}) + @Test + public void rollbackOnly_expect_similarResult() { + + EBasicVer basicVer = new EBasicVer("save2"); + basicVer.setOther("other2"); + Ebean.save(basicVer); + + try (Transaction transaction = Ebean.beginTransaction()) { + transaction.setRollbackOnly(); + + basicVer.setOther("changeOther"); + Ebean.save(basicVer); + + transaction.commit(); + } + + EBasicVer found = Ebean.find(EBasicVer.class, basicVer.getId()); + assertThat(found.getOther()).isEqualTo("other2"); + + } +}