Q: Ebean @ManyToMany(cascade=REMOVE) described #429

This commit is contained in:
Robin Bygrave
2015-10-06 14:38:05 +13:00
parent bbbb6482fb
commit dc968f16bf
4 changed files with 163 additions and 0 deletions
@@ -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();
}
}
@@ -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<MnyB> bs;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<MnyB> getBs() {
return bs;
}
public void setBs(List<MnyB> bs) {
this.bs = bs;
}
}
@@ -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<MnyC> 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<MnyC> getCs() {
return cs;
}
public void setCs(List<MnyC> cs) {
this.cs = cs;
}
}
@@ -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<MnyB> bs;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<MnyB> getBs() {
return bs;
}
public void setBs(List<MnyB> bs) {
this.bs = bs;
}
}