diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java b/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java index 24b63b52f..ae57c7d08 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java +++ b/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java @@ -643,6 +643,15 @@ public final class DefaultPersister implements Persister { private boolean isCascade() { return cascade; } + + public void modifyListenReset(BeanCollection c) { + if (insertedParent) { + // after insert set the modify listening mode + // for private owned etc + c.setModifyListening(many.getModifyListenMode()); + } + c.modifyReset(); + } } private void saveMany(SaveManyPropRequest saveMany, boolean insertMode) { @@ -684,6 +693,7 @@ public final class DefaultPersister implements Persister { BeanCollection c = (BeanCollection) details; Set modifyRemovals = c.getModifyRemovals(); + saveMany.modifyListenReset(c); if (modifyRemovals != null && !modifyRemovals.isEmpty()) { SpiTransaction t = saveMany.getTransaction(); diff --git a/src/test/java/com/avaje/tests/cascade/TestPrivateOwned.java b/src/test/java/com/avaje/tests/cascade/TestPrivateOwned.java index eee63b5ff..03a2a0111 100644 --- a/src/test/java/com/avaje/tests/cascade/TestPrivateOwned.java +++ b/src/test/java/com/avaje/tests/cascade/TestPrivateOwned.java @@ -5,6 +5,7 @@ import com.avaje.ebean.Ebean; import com.avaje.ebean.bean.BeanCollection; import com.avaje.tests.model.basic.TSDetail; import com.avaje.tests.model.basic.TSMaster; +import org.avaje.ebeantest.LoggedSqlCollector; import org.junit.Test; import java.util.List; @@ -65,11 +66,22 @@ public class TestPrivateOwned extends BaseTestCase { Ebean.save(m0); assertThat(m0.getDetails()).hasSize(2); + LoggedSqlCollector.start(); m0.getDetails().remove(0); Ebean.save(m0); + List loggedSql = LoggedSqlCollector.stop(); + assertThat(loggedSql).hasSize(1); + assertThat(loggedSql.get(0)).contains("delete from t_detail_with_other_namexxxyy where id=?"); + TSMaster masterReload = Ebean.find(TSMaster.class, m0.getId()); assertThat(masterReload.getDetails()).hasSize(1); + + LoggedSqlCollector.start(); + Ebean.save(m0); + loggedSql = LoggedSqlCollector.stop(); + assertThat(loggedSql).hasSize(0); + } }