diff --git a/src/test/java/com/avaje/tests/m2m/TestM2MDeleteCascadeFromParent.java b/src/test/java/com/avaje/tests/m2m/TestM2MDeleteCascadeFromParent.java new file mode 100644 index 000000000..d189373aa --- /dev/null +++ b/src/test/java/com/avaje/tests/m2m/TestM2MDeleteCascadeFromParent.java @@ -0,0 +1,52 @@ +package com.avaje.tests.m2m; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.ebean.SqlQuery; +import com.avaje.ebean.SqlRow; +import com.avaje.tests.model.basic.MnocRole; +import com.avaje.tests.model.basic.MnocUser; +import com.avaje.tests.model.m2m.MnyA; +import com.avaje.tests.model.m2m.MnyB; +import com.avaje.tests.model.m2m.MnyC; +import org.junit.Assert; +import org.junit.Test; + +import javax.persistence.PersistenceException; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TestM2MDeleteCascadeFromParent extends BaseTestCase { + + @Test + public void test() { + + MnyC c0 = new MnyC(); + c0.setName("c0"); + c0.save(); + + MnyA a0 = new MnyA(); + a0.setName("a0"); + a0.save(); + + MnyB b0 = new MnyB(); + b0.setName("b0"); + b0.setA(a0); + b0.save(); + + c0.getBs().add(b0); + Ebean.saveAssociation(c0, "bs"); + + SqlQuery sqlQuery = Ebean.createSqlQuery("select count(*) as count from mny_b_mny_c"); + SqlRow unique = sqlQuery.findUnique(); + assertEquals(Long.valueOf(1), unique.getLong("count")); + + + //Ebean.deleteManyToManyAssociations(b0, "cs"); + a0.delete(); + + } + + +} diff --git a/src/test/java/com/avaje/tests/model/m2m/MnyA.java b/src/test/java/com/avaje/tests/model/m2m/MnyA.java new file mode 100644 index 000000000..25c3af82b --- /dev/null +++ b/src/test/java/com/avaje/tests/model/m2m/MnyA.java @@ -0,0 +1,34 @@ +package com.avaje.tests.model.m2m; + +import com.avaje.tests.model.BaseModel; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import java.util.List; + +@Entity +public class MnyA extends BaseModel { + + String name; + + @OneToMany(mappedBy = "a", cascade = CascadeType.REMOVE) + List bs; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getBs() { + return bs; + } + + public void setBs(List bs) { + this.bs = bs; + } +} + diff --git a/src/test/java/com/avaje/tests/model/m2m/MnyB.java b/src/test/java/com/avaje/tests/model/m2m/MnyB.java new file mode 100644 index 000000000..6009cb81d --- /dev/null +++ b/src/test/java/com/avaje/tests/model/m2m/MnyB.java @@ -0,0 +1,45 @@ +package com.avaje.tests.model.m2m; + +import com.avaje.tests.model.BaseModel; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import java.util.List; + +@Entity +public class MnyB extends BaseModel { + + String name; + + @ManyToOne + MnyA a; + + @ManyToMany(cascade = CascadeType.REMOVE) + List cs; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public MnyA getA() { + return a; + } + + public void setA(MnyA a) { + this.a = a; + } + + public List getCs() { + return cs; + } + + public void setCs(List cs) { + this.cs = cs; + } +} diff --git a/src/test/java/com/avaje/tests/model/m2m/MnyC.java b/src/test/java/com/avaje/tests/model/m2m/MnyC.java new file mode 100644 index 000000000..15c07efa4 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/m2m/MnyC.java @@ -0,0 +1,32 @@ +package com.avaje.tests.model.m2m; + +import com.avaje.tests.model.BaseModel; + +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import java.util.List; + +@Entity +public class MnyC extends BaseModel { + + String name; + + @ManyToMany(mappedBy = "cs") + List bs; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getBs() { + return bs; + } + + public void setBs(List bs) { + this.bs = bs; + } +}