From 696dabc6584c3b8f43910096a7d68ec736fd4a6b Mon Sep 17 00:00:00 2001 From: wbuchner Date: Fri, 17 May 2013 09:09:07 +0200 Subject: [PATCH] Add Wobu TestCacheDelete test case for cached beans --- .../avaje/tests/cache/TestCacheDelete.java | 41 +++++++++++++++++++ .../avaje/tests/model/basic/OCachedBean.java | 15 ++++++- .../tests/model/basic/OCachedBeanChild.java | 39 ++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/avaje/tests/cache/TestCacheDelete.java create mode 100644 src/test/java/com/avaje/tests/model/basic/OCachedBeanChild.java diff --git a/src/test/java/com/avaje/tests/cache/TestCacheDelete.java b/src/test/java/com/avaje/tests/cache/TestCacheDelete.java new file mode 100644 index 000000000..0dcd17ecb --- /dev/null +++ b/src/test/java/com/avaje/tests/cache/TestCacheDelete.java @@ -0,0 +1,41 @@ +package com.avaje.tests.cache; + +import org.junit.Assert; +import org.junit.Test; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.tests.model.basic.OCachedBean; +import com.avaje.tests.model.basic.OCachedBeanChild; + +/** + * Test class testing deleting/invalidating of cached beans + */ +public class TestCacheDelete extends BaseTestCase { + + /** + * When deleting a cached entity all entities with a referenced OneToMany relation must also be invalidated! + */ + @Test + public void testCacheDeleteOneToMany() { + // arrange + OCachedBeanChild child = new OCachedBeanChild(); + OCachedBeanChild child2 = new OCachedBeanChild(); + + OCachedBean cachedBean = new OCachedBean(); + cachedBean.getChildren().add(child); + cachedBean.getChildren().add(child2); + Ebean.save(cachedBean); + + // ensure cache has been populated + Ebean.find(OCachedBeanChild.class, child.getId()); + child2 = Ebean.find(OCachedBeanChild.class, child2.getId()); + cachedBean = Ebean.find(OCachedBean.class, cachedBean.getId()); + + // act + Ebean.delete(child2); + + // assert + Assert.assertTrue(Ebean.find(OCachedBean.class, cachedBean.getId()).getChildren().size() == 1); + } +} diff --git a/src/test/java/com/avaje/tests/model/basic/OCachedBean.java b/src/test/java/com/avaje/tests/model/basic/OCachedBean.java index 631af520b..fa6f01a33 100644 --- a/src/test/java/com/avaje/tests/model/basic/OCachedBean.java +++ b/src/test/java/com/avaje/tests/model/basic/OCachedBean.java @@ -3,9 +3,11 @@ package com.avaje.tests.model.basic; import java.util.ArrayList; import java.util.List; +import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; +import javax.persistence.OneToMany; import javax.persistence.Table; import com.avaje.ebean.annotation.CacheStrategy; @@ -22,10 +24,13 @@ public class OCachedBean { Long id; String name; - + @ManyToMany List countries = new ArrayList(); + @OneToMany(mappedBy = "cachedBean", cascade = CascadeType.ALL) + List children = new ArrayList(); + public Long getId() { return id; } @@ -49,4 +54,12 @@ public class OCachedBean { public void setCountries(List countries) { this.countries = countries; } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } } diff --git a/src/test/java/com/avaje/tests/model/basic/OCachedBeanChild.java b/src/test/java/com/avaje/tests/model/basic/OCachedBeanChild.java new file mode 100644 index 000000000..7d8b05e78 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/basic/OCachedBeanChild.java @@ -0,0 +1,39 @@ +package com.avaje.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import com.avaje.ebean.annotation.CacheStrategy; + +/** + * Cached bean for testing caching implementation, especially relations. + */ +@CacheStrategy +@Entity +@Table(name = "o_cached_bean_child") +public class OCachedBeanChild { + + @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; + } +}