diff --git a/src/test/java/org/tests/model/orphanremoval/OrpDetail.java b/src/test/java/org/tests/model/orphanremoval/OrpDetail.java new file mode 100644 index 000000000..4ba7c12fa --- /dev/null +++ b/src/test/java/org/tests/model/orphanremoval/OrpDetail.java @@ -0,0 +1,58 @@ +package org.tests.model.orphanremoval; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Version; + +@Entity +public class OrpDetail { + + @Id + String id; + + String detail; + + @ManyToOne + OrpMaster master; + + @Version + long version; + + public OrpDetail(String id, String detail) { + this.id = id; + this.detail = detail; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public OrpMaster getMaster() { + return master; + } + + public void setMaster(OrpMaster master) { + this.master = master; + } + + public String getDetail() { + return detail; + } + + public void setDetail(String detail) { + this.detail = detail; + } + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } +} diff --git a/src/test/java/org/tests/model/orphanremoval/OrpMaster.java b/src/test/java/org/tests/model/orphanremoval/OrpMaster.java new file mode 100644 index 000000000..8801d87f7 --- /dev/null +++ b/src/test/java/org/tests/model/orphanremoval/OrpMaster.java @@ -0,0 +1,60 @@ +package org.tests.model.orphanremoval; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import javax.persistence.Version; +import java.util.List; + +@Entity +public class OrpMaster { + + @Id + String id; + + String name; + + @OneToMany(orphanRemoval = true, cascade = CascadeType.ALL) + List details; + + @Version + long version; + + public OrpMaster(String id, String name) { + this.id = id; + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getDetails() { + return details; + } + + public void setDetails(List details) { + this.details = details; + } + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } +} diff --git a/src/test/java/org/tests/model/orphanremoval/TestOrphanRemoveO2M.java b/src/test/java/org/tests/model/orphanremoval/TestOrphanRemoveO2M.java new file mode 100644 index 000000000..b0c52a12b --- /dev/null +++ b/src/test/java/org/tests/model/orphanremoval/TestOrphanRemoveO2M.java @@ -0,0 +1,36 @@ +package org.tests.model.orphanremoval; + +import io.ebean.BaseTestCase; +import io.ebean.Ebean; +import org.ebeantest.LoggedSqlCollector; +import org.junit.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TestOrphanRemoveO2M extends BaseTestCase { + + @Test + public void clear_expect_deletes() { + + OrpMaster master = new OrpMaster("m","master"); + master.getDetails().add(new OrpDetail("d1", "d1")); + master.getDetails().add(new OrpDetail("d2", "d2")); + + Ebean.save(master); + + master.getDetails().clear(); + + LoggedSqlCollector.start(); + Ebean.save(master); + + List sql = LoggedSqlCollector.stop(); + + assertThat(Ebean.find(OrpDetail.class, "d1")).isNull(); + assertThat(Ebean.find(OrpDetail.class, "d2")).isNull(); + + assertThat(sql).hasSize(2); + assertThat(sql.get(0)).contains("delete from orp_detail where id=?"); + } +}