mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
refresh does not work on oneToMany if property was not yet accessed
(cherry picked from commit 446103e6e06d7583f8b2bb847907d7fc77a8be9f)
This commit is contained in:
@@ -3,12 +3,14 @@ package io.ebean;
|
||||
import org.junit.Test;
|
||||
import org.tests.model.basic.EBasic;
|
||||
import org.tests.model.basic.Order;
|
||||
import org.tests.model.basic.OrderDetail;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class EbeanServer_refresh {
|
||||
@@ -77,4 +79,77 @@ public class EbeanServer_refresh {
|
||||
Ebean.refresh(order);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void refresh_on_details_new() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Order order = Ebean.find(Order.class, 1);
|
||||
|
||||
DB.refresh(order); // call refresh BEFORE first access on "getDetail";
|
||||
|
||||
assertThat(order.getDetails()).hasSize(3);
|
||||
|
||||
OrderDetail detail = new OrderDetail();
|
||||
detail.setOrder(order);
|
||||
DB.save(detail);
|
||||
|
||||
try {
|
||||
|
||||
assertThat(order.getDetails()).hasSize(3);
|
||||
|
||||
DB.refresh(order);
|
||||
|
||||
assertThat(order.getDetails()).hasSize(4);
|
||||
|
||||
} finally {
|
||||
DB.delete(detail); // restore old state
|
||||
}
|
||||
|
||||
DB.refresh(order);
|
||||
|
||||
assertThat(order.getDetails()).hasSize(3);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void refresh_on_details_changed() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Order order = Ebean.find(Order.class, 1);
|
||||
|
||||
DB.refresh(order); // call refresh BEFORE first access on "getDetail"
|
||||
// this changes the loader of the details-bean collection from DefaultServer to DLoadManyContext$LoadBuffer
|
||||
// if this refresh is commented out, the test will pass
|
||||
|
||||
assertThat(order.getDetails().get(0).getOrderQty()).isEqualTo(5);
|
||||
|
||||
// search the detail in the DB and change qty to 42
|
||||
OrderDetail detail = DB.find(OrderDetail.class, order.getDetails().get(0).getId());
|
||||
assertThat(order.getDetails().get(0)).isEqualTo(detail).isNotSameAs(detail);
|
||||
detail.setOrderQty(42);
|
||||
DB.save(detail);
|
||||
|
||||
try {
|
||||
assertThat(order.getDetails().get(0).getOrderQty()).isEqualTo(5);
|
||||
|
||||
DB.refresh(order);
|
||||
|
||||
assertThat(order.getDetails().get(0).getOrderQty()).isEqualTo(42);
|
||||
|
||||
} finally {
|
||||
// restore old value
|
||||
detail.setOrderQty(5);
|
||||
DB.save(detail);
|
||||
}
|
||||
|
||||
DB.refresh(order);
|
||||
|
||||
assertThat(order.getDetails().get(0).getOrderQty()).isEqualTo(5);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user