diff --git a/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java b/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java index 653d387f1..cb4a87cb6 100644 --- a/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java +++ b/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import static io.ebeaninternal.server.persist.DmlUtil.isNullOrZero; @@ -108,7 +109,7 @@ public class SaveManyBeans extends SaveManyBase { BeanProperty orderColumn = null; boolean hasOrderColumn = many.hasOrderColumn(); if (hasOrderColumn) { - if (!insertedParent && canSkipForOrderColumn()) { + if (!insertedParent && canSkipForOrderColumn() && saveRecurseSkippable) { return; } orderColumn = targetDescriptor.getOrderColumn(); @@ -157,7 +158,7 @@ public class SaveManyBeans extends SaveManyBase { if (many.hasJoinTable()) { skipSavingThisBean = targetDescriptor.isReference(ebi); } else { - if (orderColumn != null) { + if (orderColumn != null && !Objects.equals(sortOrder, orderColumn.getValue(detail))) { orderColumn.setValue(detail, sortOrder); ebi.setDirty(true); } diff --git a/src/test/java/org/tests/cascade/TestOrderedList.java b/src/test/java/org/tests/cascade/TestOrderedList.java index 75d2b56f8..5ccc781f9 100644 --- a/src/test/java/org/tests/cascade/TestOrderedList.java +++ b/src/test/java/org/tests/cascade/TestOrderedList.java @@ -85,11 +85,10 @@ public class TestOrderedList extends BaseTestCase { Ebean.save(fresh); sql = LoggedSqlCollector.current(); - assertThat(sql).hasSize(8); - assertSql(sql.get(0)).contains("update om_ordered_master set name=?, version=?"); - assertSql(sql.get(1)).contains("update om_ordered_detail set version=?, sort_order=? where id=? and version=?"); - assertThat(sql.get(3)).contains("update om_ordered_detail set name=?, version=?, sort_order=? where id=? and version=?"); - + assertThat(sql).hasSize(3); + assertSql(sql.get(0)).contains("update om_ordered_master set name=?, version=? where id=? and version=?; -- bind(m1-mod3"); + assertSql(sql.get(1)).contains("update om_ordered_detail set name=?, version=?, sort_order=? where id=? and version=?"); + assertThat(sql.get(2)).contains("bind(was 1,3,2,"); Ebean.delete(fresh);