FIX: OrderdColums did not work properly with cache

This commit is contained in:
Jonas Pöhler committed 2021-08-24 14:28:21 +02:00
1 parent 1e34d65675
commit f2a578cd76
5 files changed
+215 -6

No files matched your search

@@ -294,8 +294,13 @@ final class BeanDescriptorCacheHelp<T> {
List<Object> idList = entry.getIdList();
bc.checkEmptyLazyLoad();
int i = 0;
for (Object id : idList) {
many.add(bc, targetDescriptor.createReference(readOnly, id, persistenceContext));
final EntityBean ref = targetDescriptor.createReference(readOnly, id, persistenceContext);
if (many.hasOrderColumn()) {
ref._ebean_getIntercept().setSortOrder(++i);
}
many.add(bc, ref);
}
return true;
}
@@ -18,7 +18,6 @@ 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;
@@ -165,11 +164,15 @@ public final class SaveManyBeans extends SaveManyBase {
if (many.hasJoinTable()) {
skipSavingThisBean = targetDescriptor.isReference(ebi);
} else {
if (orderColumn != null && !Objects.equals(sortOrder, orderColumn.getValue(detail))) {
orderColumn.setValue(detail, sortOrder);
ebi.setDirty(true);
int originalOrder = 0;
if (orderColumn != null) {
originalOrder = detail._ebean_getIntercept().getSortOrder();
if (sortOrder != originalOrder) {
detail._ebean_intercept().setSortOrder(sortOrder);
ebi.setDirty(true);
}
}
if (targetDescriptor.isReference(ebi)) {
if (targetDescriptor.isReference(ebi) && originalOrder == 0) {
// we can skip this one
skipSavingThisBean = true;
} else if (ebi.isNewOrDirty()) {