diff --git a/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java b/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java index 2c7bde442..3c8ab0777 100644 --- a/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java +++ b/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java @@ -41,6 +41,13 @@ abstract class SaveManyBase { */ abstract void save(); + void preElementCollectionUpdate(Object parentId) { + if (!insertedParent) { + request.preElementCollectionUpdate(); + server.execute(many.deleteByParentId(parentId, null), transaction); + } + } + void resetModifyState() { if (value instanceof BeanCollection) { modifyListenReset((BeanCollection) value); diff --git a/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java b/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java index 94097fd81..18f070556 100644 --- a/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java +++ b/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java @@ -2,7 +2,6 @@ package io.ebeaninternal.server.persist; import io.ebean.SqlUpdate; import io.ebean.bean.EntityBean; -import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.core.PersistRequestBean; import io.ebeaninternal.server.deploy.BeanCollectionUtil; import io.ebeaninternal.server.deploy.BeanPropertyAssocMany; @@ -27,26 +26,15 @@ class SaveManyElementCollection extends SaveManyBase { } Object parentId = request.getBeanId(); - SpiEbeanServer server = request.getServer(); - - if (!insertedParent) { - request.preElementCollectionUpdate(); - SqlUpdate sqlDelete = many.deleteByParentId(parentId, null); - server.execute(sqlDelete, transaction); - } + preElementCollectionUpdate(parentId); transaction.depth(+1); - - String insert = many.insertElementCollection(); - SqlUpdate sqlInsert = server.createSqlUpdate(insert); - + SqlUpdate sqlInsert = server.createSqlUpdate(many.insertElementCollection()); for (Object value : collection) { - sqlInsert.setNextParameter(parentId); many.bindElementValue(sqlInsert, value); server.execute(sqlInsert, transaction); } - transaction.depth(-1); resetModifyState(); postElementCollectionUpdate(); diff --git a/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java b/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java index f61ac4e0f..6da9b5c2c 100644 --- a/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java +++ b/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java @@ -2,7 +2,6 @@ package io.ebeaninternal.server.persist; import io.ebean.SqlUpdate; import io.ebean.bean.EntityBean; -import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.core.PersistRequestBean; import io.ebeaninternal.server.deploy.BeanCollectionUtil; import io.ebeaninternal.server.deploy.BeanPropertyAssocMany; @@ -29,18 +28,10 @@ class SaveManyElementCollectionMap extends SaveManyBase { } Object parentId = request.getBeanId(); - SpiEbeanServer server = request.getServer(); - if (!insertedParent) { - request.preElementCollectionUpdate(); - SqlUpdate sqlDelete = many.deleteByParentId(parentId, null); - server.execute(sqlDelete, transaction); - } + preElementCollectionUpdate(parentId); transaction.depth(+1); - - String insert = many.insertElementCollection(); - SqlUpdate sqlInsert = server.createSqlUpdate(insert); - + SqlUpdate sqlInsert = server.createSqlUpdate(many.insertElementCollection()); for (Map.Entry entry : entries) { sqlInsert.setNextParameter(parentId); sqlInsert.setNextParameter(entry.getKey());