FIX: no update with @OrderColumn on treeDepth > 1 and avoid needless updates

This commit is contained in:
Jonas Pöhler (JPo)
2020-04-06 15:34:43 +02:00
parent b61e9af750
commit 2d274c46fa
2 changed files with 7 additions and 7 deletions
@@ -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);
}
@@ -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);