diff --git a/ebean-core/src/test/java/org/tests/cache/TestM2MCache.java b/ebean-core/src/test/java/org/tests/cache/TestM2MCache.java new file mode 100644 index 000000000..83cb402f1 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/cache/TestM2MCache.java @@ -0,0 +1,78 @@ +package org.tests.cache; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; +import org.tests.model.cache.M2MCacheChild; +import org.tests.model.cache.M2MCacheMaster; + +import io.ebean.BaseTestCase; +import io.ebean.DB; + +public class TestM2MCache extends BaseTestCase { + + @Test + public void testM2MWithCache() throws Exception { + M2MCacheChild cld = new M2MCacheChild(); + cld.setName("test"); + cld.setId(1); + DB.save(cld); + + M2MCacheMaster cfg = new M2MCacheMaster(); + cfg.setId(42); + cfg.getSet1().add(cld); + cfg.getSet2().add(cld); + DB.save(cfg); + + // find master and access set1 + set2. + // lazy load something from set1 + M2MCacheMaster cfg1 = DB.find(M2MCacheMaster.class, 42); + + cfg1.getSet1().size(); + cfg1.getSet2().size(); + assertThat(cfg1.getSet1().iterator().next().getName()).isEqualTo("test"); + + // do it again + cfg1 = DB.find(M2MCacheMaster.class, 42); + + cfg1.getSet1().size(); + cfg1.getSet2().size(); + + assertThat(cfg1.getSet1().iterator().next().getName()).isEqualTo("test"); + // do it again + cfg1 = DB.find(M2MCacheMaster.class, 42); + + cfg1.getSet1().size(); + cfg1.getSet2().size(); + + assertThat(cfg1.getSet1().iterator().next().getName()).isEqualTo("test"); + + } + + @Test + public void testM2MWithCacheMinimal() throws Exception { + M2MCacheChild cld = new M2MCacheChild(); + cld.setName("test"); + cld.setId(2); + DB.save(cld); + + M2MCacheMaster cfg = new M2MCacheMaster(); + cfg.setId(43); + cfg.getSet1().add(cld); + cfg.getSet2().add(cld); + DB.save(cfg); + + DB.find(M2MCacheMaster.class, 43); + + M2MCacheMaster cfg1 = DB.find(M2MCacheMaster.class, 43); + cfg1.getSet2().size(); + + cfg1 = DB.find(M2MCacheMaster.class, 43); + + cfg1.getSet1().size(); + cfg1.getSet2().size(); + + assertThat(cfg1.getSet1().iterator().next().getName()).isEqualTo("test"); + + } +} diff --git a/ebean-core/src/test/java/org/tests/model/cache/M2MCacheChild.java b/ebean-core/src/test/java/org/tests/model/cache/M2MCacheChild.java new file mode 100644 index 000000000..d40b26a63 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/cache/M2MCacheChild.java @@ -0,0 +1,33 @@ +package org.tests.model.cache; + +import javax.persistence.Entity; +import javax.persistence.Id; + +import io.ebean.annotation.Cache; + +@Entity +@Cache(enableQueryCache = true, enableBeanCache = true) +public class M2MCacheChild { + + @Id + private Integer id; + + private String name; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} \ No newline at end of file diff --git a/ebean-core/src/test/java/org/tests/model/cache/M2MCacheMaster.java b/ebean-core/src/test/java/org/tests/model/cache/M2MCacheMaster.java new file mode 100644 index 000000000..5eedc2994 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/cache/M2MCacheMaster.java @@ -0,0 +1,53 @@ +package org.tests.model.cache; + +import java.util.LinkedHashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; + +import io.ebean.annotation.Cache; + +@Entity +@Cache(enableQueryCache = true, enableBeanCache = true) +public class M2MCacheMaster { + + @Id + private Integer id; + + @ManyToMany(cascade = CascadeType.ALL) + @JoinTable(name = "m2mcache_set1") + private Set set1 = new LinkedHashSet<>(); + + @ManyToMany(cascade = CascadeType.ALL) + @JoinTable(name = "m2mcache_set2") + private Set set2 = new LinkedHashSet<>(); + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Set getSet1() { + return set1; + } + + public void setSet1(Set set1) { + this.set1 = set1; + } + + public Set getSet2() { + return set2; + } + + public void setSet2(Set set2) { + this.set2 = set2; + } + +}