mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Allow for null items in @DbArray lists. (#1812)
* Added code to allow for null items in @DbArray lists. * Test case for changing OneToMany collection by editing target bean.
This commit is contained in:
committed by
Rob Bygrave
parent
8ae2ae7f8b
commit
b329ae42db
@@ -104,7 +104,8 @@ public class ScalarTypeArrayList extends ScalarTypeArrayBase<List> implements Sc
|
||||
protected List fromArray(Object[] array1) {
|
||||
List list = new ArrayList(array1.length);
|
||||
for (Object element : array1) {
|
||||
list.add(converter.toElement(element));
|
||||
if(element == null ) list.add(null);
|
||||
else list.add(converter.toElement(element));
|
||||
}
|
||||
return new ModifyAwareList(list);
|
||||
}
|
||||
|
||||
+41
-7
@@ -12,13 +12,7 @@ import io.ebeaninternal.server.cache.CachedManyIds;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.tests.model.basic.Contact;
|
||||
import org.tests.model.basic.Country;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.OCachedBean;
|
||||
import org.tests.model.basic.Order;
|
||||
import org.tests.model.basic.OrderDetail;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
import org.tests.model.basic.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -146,6 +140,46 @@ public class TestCacheCollectionIds extends BaseTestCase {
|
||||
assertTrue(cachedManyIds.getIdList().contains("AU"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testChangingCollectionByEditingConnectedBean() {
|
||||
ResetBasicData.reset();
|
||||
|
||||
OCachedBean cachedBean = new OCachedBean();
|
||||
cachedBean.setName("hello");
|
||||
|
||||
Ebean.save(cachedBean);
|
||||
awaitL2Cache();
|
||||
|
||||
OCachedBean dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId());
|
||||
assertEquals(0, dummyToLoad.getChildren().size());
|
||||
|
||||
OCachedBeanChild child1=new OCachedBeanChild();
|
||||
child1.setCachedBean(cachedBean);
|
||||
Ebean.insert(child1);
|
||||
awaitL2Cache();
|
||||
dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId());
|
||||
assertEquals(1, dummyToLoad.getChildren().size());
|
||||
|
||||
OCachedBeanChild child2=new OCachedBeanChild();
|
||||
child2.setCachedBean(cachedBean);
|
||||
Ebean.insert(child2);
|
||||
awaitL2Cache();
|
||||
dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId());
|
||||
assertEquals(2, dummyToLoad.getChildren().size());
|
||||
|
||||
Ebean.delete(child2);
|
||||
awaitL2Cache();
|
||||
dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId());
|
||||
assertEquals(1, dummyToLoad.getChildren().size());
|
||||
|
||||
Ebean.delete(child1);
|
||||
awaitL2Cache();
|
||||
dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId());
|
||||
assertEquals(0, dummyToLoad.getChildren().size());
|
||||
|
||||
Ebean.delete(cachedBean);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* When updating a ManyToMany relations also the collection cache must be updated.
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
public class TestDbArray_basic extends BaseTestCase {
|
||||
|
||||
@@ -190,4 +191,56 @@ public class TestDbArray_basic extends BaseTestCase {
|
||||
Ebean.saveAll(all);
|
||||
Ebean.deleteAll(all);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nullItems() {
|
||||
EArrayBean bean = new EArrayBean();
|
||||
bean.setName("null items");
|
||||
|
||||
List<Double> doubles = new ArrayList<>();
|
||||
doubles.add(1.3);
|
||||
doubles.add(null);
|
||||
doubles.add(2.4);
|
||||
|
||||
bean.getPhoneNumbers().add("111222333");
|
||||
bean.getPhoneNumbers().add(null);
|
||||
bean.getPhoneNumbers().add("333222111");
|
||||
|
||||
bean.getOtherIds().add(15L);
|
||||
bean.getOtherIds().add(null);
|
||||
bean.getOtherIds().add(30L);
|
||||
bean.getOtherIds().add(null);
|
||||
|
||||
bean.getUids().add(UUID.randomUUID());
|
||||
bean.getUids().add(null);
|
||||
bean.getUids().add(UUID.randomUUID());
|
||||
|
||||
bean.setDoubs(doubles);
|
||||
|
||||
bean.setStatuses(new ArrayList<>());
|
||||
bean.getStatuses().add(EArrayBean.Status.ONE);
|
||||
bean.getStatuses().add(null);
|
||||
bean.getStatuses().add(EArrayBean.Status.THREE);
|
||||
|
||||
bean.getVcEnums().add(VarcharEnum.ONE);
|
||||
bean.getVcEnums().add(null);
|
||||
bean.getVcEnums().add(VarcharEnum.TWO);
|
||||
|
||||
bean.getIntEnums().add(null);
|
||||
bean.getIntEnums().add(IntEnum.ZERO);
|
||||
bean.getIntEnums().add(null);
|
||||
bean.getIntEnums().add(IntEnum.TWO);
|
||||
|
||||
Ebean.save(bean);
|
||||
|
||||
found = Ebean.find(EArrayBean.class, bean.getId());
|
||||
assertThat(found.getPhoneNumbers()).containsExactly("111222333", null, "333222111");
|
||||
assertThat(found.getOtherIds()).containsExactly(15L, null, 30L, null);
|
||||
assertNull(found.getUids().get(1));
|
||||
assertThat(found.getDoubs()).containsExactly(1.3, null, 2.4);
|
||||
assertThat(found.getStatuses()).containsExactly(EArrayBean.Status.ONE, null, EArrayBean.Status.THREE);
|
||||
assertThat(found.getVcEnums()).containsExactly(VarcharEnum.ONE, null, VarcharEnum.TWO);
|
||||
assertThat(found.getIntEnums()).containsExactly(null, IntEnum.ZERO, null, IntEnum.TWO);
|
||||
Ebean.delete(bean);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user