diff --git a/src/test/java/org/tests/cache/TestCacheCollectionIds.java b/src/test/java/org/tests/cache/TestCacheCollectionIds.java index a57908242..c57811889 100644 --- a/src/test/java/org/tests/cache/TestCacheCollectionIds.java +++ b/src/test/java/org/tests/cache/TestCacheCollectionIds.java @@ -141,11 +141,11 @@ public class TestCacheCollectionIds extends BaseTestCase { } @Test - public void testChangingCollectionByEditingConnectedBean() { + public void testChangingCollectionByEditingConnectedCachedBean() { ResetBasicData.reset(); OCachedBean cachedBean = new OCachedBean(); - cachedBean.setName("hello"); + cachedBean.setName("hello1"); Ebean.save(cachedBean); awaitL2Cache(); @@ -180,6 +180,46 @@ public class TestCacheCollectionIds extends BaseTestCase { Ebean.delete(cachedBean); } + @Test + public void testChangingCollectionByEditingConnectedNotCachedBean() { + ResetBasicData.reset(); + + OCachedBean cachedBean = new OCachedBean(); + cachedBean.setName("hello2"); + + Ebean.save(cachedBean); + awaitL2Cache(); + + OCachedBean dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId()); + assertEquals(0, dummyToLoad.getNotCachedChildren().size()); + + OBeanChild child1=new OBeanChild(); + child1.setCachedBean(cachedBean); + Ebean.insert(child1); + awaitL2Cache(); + dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId()); + assertEquals(1, dummyToLoad.getNotCachedChildren().size()); + + OBeanChild child2=new OBeanChild(); + child2.setCachedBean(cachedBean); + Ebean.insert(child2); + awaitL2Cache(); + dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId()); + assertEquals(2, dummyToLoad.getNotCachedChildren().size()); + + Ebean.delete(child2); + awaitL2Cache(); + dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId()); + assertEquals(1, dummyToLoad.getNotCachedChildren().size()); + + Ebean.delete(child1); + awaitL2Cache(); + dummyToLoad = Ebean.find(OCachedBean.class, cachedBean.getId()); + assertEquals(0, dummyToLoad.getNotCachedChildren().size()); + + Ebean.delete(cachedBean); + } + /** * When updating a ManyToMany relations also the collection cache must be updated. diff --git a/src/test/java/org/tests/model/basic/OBeanChild.java b/src/test/java/org/tests/model/basic/OBeanChild.java new file mode 100644 index 000000000..a4d8d65ee --- /dev/null +++ b/src/test/java/org/tests/model/basic/OBeanChild.java @@ -0,0 +1,38 @@ +package org.tests.model.basic; + +import io.ebean.annotation.Cache; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * Not cached bean (copy of {@link OCachedBeanChild}} without {@link Cache} annotation + * for testing caching implementation for relations {@link Cache} and not {@link Cache}. + */ +@Entity +@Table(name = "o_bean_child") +public class OBeanChild { + @Id + Long id; + + @ManyToOne + OCachedBean cachedBean; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public OCachedBean getCachedBean() { + return cachedBean; + } + + public void setCachedBean(OCachedBean cachedBean) { + this.cachedBean = cachedBean; + } +} diff --git a/src/test/java/org/tests/model/basic/OCachedBean.java b/src/test/java/org/tests/model/basic/OCachedBean.java index 8e8d2a976..7879b5251 100644 --- a/src/test/java/org/tests/model/basic/OCachedBean.java +++ b/src/test/java/org/tests/model/basic/OCachedBean.java @@ -30,6 +30,9 @@ public class OCachedBean { @OneToMany(mappedBy = "cachedBean", cascade = CascadeType.ALL) List children = new ArrayList<>(); + @OneToMany(mappedBy = "cachedBean", cascade = CascadeType.ALL) + List notCachedChildren = new ArrayList<>(); + public Long getId() { return id; } @@ -61,4 +64,12 @@ public class OCachedBean { public void setChildren(List children) { this.children = children; } + + public List getNotCachedChildren() { + return notCachedChildren; + } + + public void setNotCachedChildren(List notCachedChildren) { + this.notCachedChildren = notCachedChildren; + } }