From 2442eb017ae4a57ac5da791d8a766217332d7ee8 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Mon, 30 May 2016 17:01:20 +1200 Subject: [PATCH] #725 - L2 cache not updating CacheManyId's entry when Lazy loading on a ToMany relationship, after a prior update, when other ToMany is a vanilla type (like ArrayList) --- .../server/deploy/BeanPropertyAssocMany.java | 2 + .../deploy/BeanPropertyAssocManyTest.java | 43 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/test/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java index 9331bd896..970787e10 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java @@ -638,6 +638,8 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc { if (v instanceof BeanCollection) { BeanCollection bc = (BeanCollection) v; return bc.isReference() ? bc : null; + } else if (v != null) { + return null; } else { return createReference(parentBean); } diff --git a/src/test/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java b/src/test/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java new file mode 100644 index 000000000..2f474d90b --- /dev/null +++ b/src/test/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java @@ -0,0 +1,43 @@ +package com.avaje.ebeaninternal.server.deploy; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.bean.BeanCollection; +import com.avaje.ebean.bean.EntityBean; +import com.avaje.tests.model.basic.Contact; +import com.avaje.tests.model.basic.Customer; +import org.junit.Test; + +import java.util.ArrayList; + +import static org.junit.Assert.*; + +public class BeanPropertyAssocManyTest extends BaseTestCase { + + BeanDescriptor customerDesc = spiEbeanServer().getBeanDescriptor(Customer.class); + + BeanPropertyAssocMany contacts() { + return (BeanPropertyAssocMany)customerDesc.getBeanProperty("contacts"); + } + + @Test + public void createReferenceIfNull_when_notBeanCollection_expect_null() { + + Customer customer = new Customer(); + customer.setContacts(new ArrayList()); + + BeanCollection ref = contacts().createReferenceIfNull((EntityBean) customer); + assertNull(ref); + } + + @Test + public void createReferenceIfNull_when_null_expect_ref() { + + Customer customer = new Customer(); + customer.setContacts(null); + + BeanCollection ref = contacts().createReferenceIfNull((EntityBean) customer); + assertNotNull(ref); + assertTrue(ref.isReference()); + } + +} \ No newline at end of file