From 7a974320edee149cc3e1660bb00ac45857412994 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Fri, 18 Oct 2019 16:20:38 +1300 Subject: [PATCH] #1846 - Test for - Inheritance cascade of fields with bean inheritance Note this includes the workaround RootBean.preRemove(), so doesn't fail --- .../cascadedelete/ComplexBean.java | 27 +++++++++++++++ .../cascadedelete/ElementBean.java | 26 +++++++++++++++ .../cascadedelete/ReferencingBean.java | 33 +++++++++++++++++++ .../inheritance/cascadedelete/RootBean.java | 22 +++++++++++++ .../inheritance/cascadedelete/SimpleBean.java | 21 ++++++++++++ .../TestInheritanceDeleteCascade.java | 26 +++++++++++++++ 6 files changed, 155 insertions(+) create mode 100644 src/test/java/org/tests/inheritance/cascadedelete/ComplexBean.java create mode 100644 src/test/java/org/tests/inheritance/cascadedelete/ElementBean.java create mode 100644 src/test/java/org/tests/inheritance/cascadedelete/ReferencingBean.java create mode 100644 src/test/java/org/tests/inheritance/cascadedelete/RootBean.java create mode 100644 src/test/java/org/tests/inheritance/cascadedelete/SimpleBean.java create mode 100644 src/test/java/org/tests/inheritance/cascadedelete/TestInheritanceDeleteCascade.java diff --git a/src/test/java/org/tests/inheritance/cascadedelete/ComplexBean.java b/src/test/java/org/tests/inheritance/cascadedelete/ComplexBean.java new file mode 100644 index 000000000..095ba5af6 --- /dev/null +++ b/src/test/java/org/tests/inheritance/cascadedelete/ComplexBean.java @@ -0,0 +1,27 @@ +package org.tests.inheritance.cascadedelete; + +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import java.util.List; + +import static javax.persistence.CascadeType.ALL; + +@Entity +public class ComplexBean extends RootBean { + + @OneToMany(cascade = ALL) + private List elements; + + public ComplexBean(List elements) { + this.elements = elements; + } + + public List getElements() { + return elements; + } + + public void setElements(List elements) { + this.elements = elements; + } +} + diff --git a/src/test/java/org/tests/inheritance/cascadedelete/ElementBean.java b/src/test/java/org/tests/inheritance/cascadedelete/ElementBean.java new file mode 100644 index 000000000..ccf784adc --- /dev/null +++ b/src/test/java/org/tests/inheritance/cascadedelete/ElementBean.java @@ -0,0 +1,26 @@ +package org.tests.inheritance.cascadedelete; + +import io.ebean.annotation.NotNull; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class ElementBean { + + @Id + @GeneratedValue + private Long id; + + @NotNull + private String value; + + public ElementBean(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/test/java/org/tests/inheritance/cascadedelete/ReferencingBean.java b/src/test/java/org/tests/inheritance/cascadedelete/ReferencingBean.java new file mode 100644 index 000000000..3c66367e8 --- /dev/null +++ b/src/test/java/org/tests/inheritance/cascadedelete/ReferencingBean.java @@ -0,0 +1,33 @@ +package org.tests.inheritance.cascadedelete; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import java.util.List; +import java.util.UUID; + +import static javax.persistence.CascadeType.ALL; + +@Entity +public class ReferencingBean { + + @Id + @GeneratedValue + public UUID id; + + @OneToMany(cascade = ALL) + private List rootBeans; + + public ReferencingBean(List rootBeans) { + this.rootBeans = rootBeans; + } + + public List getRootBeans() { + return rootBeans; + } + + public void setRootBeans(List rootBeans) { + this.rootBeans = rootBeans; + } +} diff --git a/src/test/java/org/tests/inheritance/cascadedelete/RootBean.java b/src/test/java/org/tests/inheritance/cascadedelete/RootBean.java new file mode 100644 index 000000000..d9d9ab08e --- /dev/null +++ b/src/test/java/org/tests/inheritance/cascadedelete/RootBean.java @@ -0,0 +1,22 @@ +package org.tests.inheritance.cascadedelete; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.PreRemove; +import java.util.UUID; + +@Entity +@Inheritance +public abstract class RootBean { + + @Id + @GeneratedValue + public UUID id; + + // added as workaround for the issue + @PreRemove + public void preRemove() { + } +} diff --git a/src/test/java/org/tests/inheritance/cascadedelete/SimpleBean.java b/src/test/java/org/tests/inheritance/cascadedelete/SimpleBean.java new file mode 100644 index 000000000..e234228fc --- /dev/null +++ b/src/test/java/org/tests/inheritance/cascadedelete/SimpleBean.java @@ -0,0 +1,21 @@ +package org.tests.inheritance.cascadedelete; + +import javax.persistence.Entity; + +@Entity +public class SimpleBean extends RootBean { + + private String value; + + public SimpleBean(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/test/java/org/tests/inheritance/cascadedelete/TestInheritanceDeleteCascade.java b/src/test/java/org/tests/inheritance/cascadedelete/TestInheritanceDeleteCascade.java new file mode 100644 index 000000000..e4da9b23d --- /dev/null +++ b/src/test/java/org/tests/inheritance/cascadedelete/TestInheritanceDeleteCascade.java @@ -0,0 +1,26 @@ +package org.tests.inheritance.cascadedelete; + +import io.ebean.BaseTestCase; +import io.ebean.DB; +import org.junit.Test; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertNull; + +public class TestInheritanceDeleteCascade extends BaseTestCase { + + @Test + public void test() { + + RootBean bean1 = new ComplexBean(asList(new ElementBean("element-1"), new ElementBean("element-2"))); + RootBean bean2 = new SimpleBean("simple-1"); + ReferencingBean referencingBean = new ReferencingBean(asList(bean1, bean2)); + + DB.save(referencingBean); + DB.delete(referencingBean); + + assertNull(DB.find(RootBean.class, DB.getBeanId(bean1))); + assertNull(DB.find(RootBean.class, DB.getBeanId(bean2))); + } + +}