From 1d49e5b341ea29d0166e9f87e169c4eb336941cd Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Mon, 21 Jan 2019 22:09:15 +1300 Subject: [PATCH] #1613 - When using transaction.setPersistCascade(false) ... a Delete query should not cascade --- .../server/core/OrmQueryRequest.java | 2 +- .../org/tests/delete/TestDeleteByQuery.java | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java b/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java index fd21d8f8a..70bb74d4f 100644 --- a/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java +++ b/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java @@ -118,7 +118,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery @Override public boolean isDeleteByStatement() { - return beanDescriptor.isDeleteByStatement(); + return !transaction.isPersistCascade() || beanDescriptor.isDeleteByStatement(); } @Override diff --git a/src/test/java/org/tests/delete/TestDeleteByQuery.java b/src/test/java/org/tests/delete/TestDeleteByQuery.java index a0b5e5d4c..60c9043a1 100644 --- a/src/test/java/org/tests/delete/TestDeleteByQuery.java +++ b/src/test/java/org/tests/delete/TestDeleteByQuery.java @@ -4,16 +4,16 @@ import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.EbeanServer; import io.ebean.Query; +import io.ebean.Transaction; import io.ebean.annotation.IgnorePlatform; import io.ebean.annotation.Platform; - +import org.ebeantest.LoggedSqlCollector; +import org.junit.Test; import org.tests.model.basic.BBookmarkUser; import org.tests.model.basic.Contact; import org.tests.model.basic.Country; import org.tests.model.basic.Customer; import org.tests.model.basic.ResetBasicData; -import org.ebeantest.LoggedSqlCollector; -import org.junit.Test; import java.util.List; @@ -126,6 +126,23 @@ public class TestDeleteByQuery extends BaseTestCase { Ebean.delete(Contact.class, 7000); } + @Test + public void queryDelete_withTransactionNoCascade() { + + LoggedSqlCollector.start(); + + try (Transaction transaction = Ebean.beginTransaction()) { + transaction.setPersistCascade(false); + + Ebean.find(Contact.class).where().eq("id", 7001).delete(); + + transaction.commit(); + } + + List sql = LoggedSqlCollector.stop(); + assertThat(sql.get(0)).contains("delete from contact where id = ?"); + } + @Test public void testWithForUpdate() {