From d1314124affffa4419023e20ef51c7be20c06287 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Fri, 14 Jun 2019 16:38:43 +1200 Subject: [PATCH] #1722 - Failing test for - L2 cache throw exception when query with custom ManyToMany relation model --- .../tests/cache/embeddedid/CEPCategory.java | 48 ++++++++++++++ .../tests/cache/embeddedid/CEPProduct.java | 64 +++++++++++++++++++ .../cache/embeddedid/CEPProductCategory.java | 40 ++++++++++++ .../embeddedid/CEPProductCategoryId.java | 42 ++++++++++++ .../TestBeanCacheEmbeddedIdPrimitives.java | 44 +++++++++++++ 5 files changed, 238 insertions(+) create mode 100644 src/test/java/org/tests/cache/embeddedid/CEPCategory.java create mode 100644 src/test/java/org/tests/cache/embeddedid/CEPProduct.java create mode 100644 src/test/java/org/tests/cache/embeddedid/CEPProductCategory.java create mode 100644 src/test/java/org/tests/cache/embeddedid/CEPProductCategoryId.java create mode 100644 src/test/java/org/tests/cache/embeddedid/TestBeanCacheEmbeddedIdPrimitives.java diff --git a/src/test/java/org/tests/cache/embeddedid/CEPCategory.java b/src/test/java/org/tests/cache/embeddedid/CEPCategory.java new file mode 100644 index 000000000..80a543a11 --- /dev/null +++ b/src/test/java/org/tests/cache/embeddedid/CEPCategory.java @@ -0,0 +1,48 @@ +package org.tests.cache.embeddedid; + +import io.ebean.annotation.Cache; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Version; + +@Cache +@Entity +public class CEPCategory { + + @Id + private Long id; + + private String name; + + @Version + private Long version; + + public CEPCategory(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } +} diff --git a/src/test/java/org/tests/cache/embeddedid/CEPProduct.java b/src/test/java/org/tests/cache/embeddedid/CEPProduct.java new file mode 100644 index 000000000..064b76890 --- /dev/null +++ b/src/test/java/org/tests/cache/embeddedid/CEPProduct.java @@ -0,0 +1,64 @@ +package org.tests.cache.embeddedid; + +import io.ebean.annotation.Cache; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import javax.persistence.OrderColumn; +import javax.persistence.Version; +import java.util.List; + +@Cache +@Entity +public class CEPProduct { + + @Id + private Long id; + + private String name; + + @OrderColumn(name = "priority") + @OneToMany(cascade = CascadeType.ALL, mappedBy = "product") + private List productCategories; + + @Version + private Long version; + + public CEPProduct(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } + + public List getProductCategories() { + return productCategories; + } + + public void setProductCategories(List productCategories) { + this.productCategories = productCategories; + } +} diff --git a/src/test/java/org/tests/cache/embeddedid/CEPProductCategory.java b/src/test/java/org/tests/cache/embeddedid/CEPProductCategory.java new file mode 100644 index 000000000..3c18bbc1a --- /dev/null +++ b/src/test/java/org/tests/cache/embeddedid/CEPProductCategory.java @@ -0,0 +1,40 @@ +package org.tests.cache.embeddedid; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.ManyToOne; + +@IdClass(CEPProductCategoryId.class) +@Entity +public class CEPProductCategory { + + @Id + @ManyToOne + private CEPCategory category; + + @Id + @ManyToOne + private CEPProduct product; + + public CEPProductCategory(CEPCategory category, CEPProduct product) { + this.category = category; + this.product = product; + } + + public CEPCategory getCategory() { + return category; + } + + public void setCategory(CEPCategory category) { + this.category = category; + } + + public CEPProduct getProduct() { + return product; + } + + public void setProduct(CEPProduct product) { + this.product = product; + } +} diff --git a/src/test/java/org/tests/cache/embeddedid/CEPProductCategoryId.java b/src/test/java/org/tests/cache/embeddedid/CEPProductCategoryId.java new file mode 100644 index 000000000..6c1ddc5c6 --- /dev/null +++ b/src/test/java/org/tests/cache/embeddedid/CEPProductCategoryId.java @@ -0,0 +1,42 @@ +package org.tests.cache.embeddedid; + +import javax.persistence.Embeddable; +import java.util.Objects; + +@Embeddable +public class CEPProductCategoryId { + + // primitive id values as part of an EmbeddedId (NPE #1722) + private long customerId; + private long addressId; + + public long getCustomerId() { + return customerId; + } + + public void setCustomerId(long customerId) { + this.customerId = customerId; + } + + public long getAddressId() { + return addressId; + } + + public void setAddressId(long addressId) { + this.addressId = addressId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CEPProductCategoryId that = (CEPProductCategoryId) o; + return customerId == that.customerId && + addressId == that.addressId; + } + + @Override + public int hashCode() { + return Objects.hash(customerId, addressId); + } +} diff --git a/src/test/java/org/tests/cache/embeddedid/TestBeanCacheEmbeddedIdPrimitives.java b/src/test/java/org/tests/cache/embeddedid/TestBeanCacheEmbeddedIdPrimitives.java new file mode 100644 index 000000000..c3d6ba97d --- /dev/null +++ b/src/test/java/org/tests/cache/embeddedid/TestBeanCacheEmbeddedIdPrimitives.java @@ -0,0 +1,44 @@ +package org.tests.cache.embeddedid; + +import io.ebean.Ebean; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertNotNull; + +public class TestBeanCacheEmbeddedIdPrimitives { + + @Test + public void findById() { + + CEPProduct product1a = new CEPProduct("Product 01"); + Ebean.save(product1a); + + assertNotNull(product1a.getId()); + + CEPCategory category1a = new CEPCategory("Category 01"); + Ebean.save(category1a); + + assertNotNull(category1a.getId()); + + CEPProduct product1 = Ebean.find(CEPProduct.class).setUseCache(true).where().eq("id", product1a.getId()).findOne(); + + assertNotNull(product1); + + product1.getProductCategories().forEach(customerAddress -> { + System.out.println(customerAddress.getCategory()); + }); + assertThat(product1.getProductCategories()).isEmpty(); + + CEPProduct product2 = Ebean.find(CEPProduct.class).setUseCache(true).where().eq("id", product1a.getId()).findOne(); + assertNotNull(product2); + + // fail here on null -> long conversion in embedded id + product2.getProductCategories().forEach(customerAddress -> { + System.out.println(customerAddress.getCategory()); + }); + assertThat(product2.getProductCategories()).isEmpty(); + } + + +}