Merge branch 'bugfix/order_column_l1_cache' of https://github.com/FOCONIS/ebean into FOCONIS-bugfix/order_column_l1_cache

This commit is contained in:
rob bygrave
2020-04-12 16:37:00 +12:00
2 changed files with 35 additions and 0 deletions
@@ -179,6 +179,11 @@ public class SaveManyBeans extends SaveManyBase {
if (!skipSavingThisBean) {
persister.saveRecurse(detail, transaction, parentBean, request.getFlags());
if (many.hasOrderColumn()) {
// Clear the bean from the PersistenceContext (L1 cache), because the order of referenced beans might have changed
final BeanDescriptor<?> beanDescriptor = many.getBeanDescriptor();
beanDescriptor.contextClear(transaction.getPersistenceContext(), beanDescriptor.getId(parentBean));
}
}
}
}
@@ -5,6 +5,7 @@ import io.ebean.TransactionalTestCase;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import java.util.Comparator;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@@ -31,6 +32,35 @@ public class TestOrderColumn extends TransactionalTestCase {
assertThat(result.getChildren()).extracting(OrderReferencedChild::getChildName).containsExactly("c0", "c1", "c2", "c3", "c4");
}
@Test
public void testOrderColumnSortChange() {
final OrderMaster master = new OrderMaster();
for (int i = 0; i < 5; i++) {
final OrderReferencedChild child = new OrderReferencedChild("p" + i);
child.setChildName("c" + i);
master.getChildren().add(child);
}
Ebean.save(master);
OrderMaster result = Ebean.find(OrderMaster.class).findOne();
assertThat(result.getChildren()).hasSize(5);
assertThat(master.getChildren()).extracting(OrderReferencedChild::getName).containsExactly("p0", "p1", "p2", "p3", "p4");
master.getChildren().sort(Comparator.comparing(OrderReferencedChild::getName).reversed());
assertThat(master.getChildren()).extracting(OrderReferencedChild::getName).containsExactly("p4", "p3", "p2", "p1", "p0");
Ebean.save(master);
result = Ebean.find(OrderMaster.class).findOne();
assertThat(result.getChildren()).hasSize(5);
assertThat(result.getChildren()).extracting(OrderReferencedChild::getName).containsExactly("p4", "p3", "p2", "p1", "p0");
}
@Test
public void testModifyTree() {
final OrderMaster master = new OrderMaster();