From f0bc4c786c62cdd899dfff7b05580dbabd3f44b4 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Tue, 24 Sep 2019 22:36:17 +1200 Subject: [PATCH] #1826 - Remove PrivateOwned, migrate to orphanRemoval=true attribute on OneToMany --- pom.xml | 2 +- .../deploy/parse/AnnotationAssocManys.java | 7 -- .../TestPrivateOwnedNoCascadeRemove.java | 58 -------------- .../inheritance/OrganizationTreeNode.java | 8 +- .../org/tests/model/basic/AnimalShelter.java | 8 +- .../tests/model/basic/TMapSuperEntity.java | 3 - .../org/tests/model/basic/TSDetailTwo.java | 74 ----------------- .../org/tests/model/basic/TSMasterTwo.java | 79 ------------------- .../org/tests/model/embedded/EEmbOuter.java | 5 +- .../org/tests/model/selfref/ResourceFile.java | 5 +- 10 files changed, 9 insertions(+), 240 deletions(-) delete mode 100644 src/test/java/org/tests/cascade/TestPrivateOwnedNoCascadeRemove.java delete mode 100644 src/test/java/org/tests/model/basic/TSDetailTwo.java delete mode 100644 src/test/java/org/tests/model/basic/TSMasterTwo.java diff --git a/pom.xml b/pom.xml index cd0bce45b..4c4cb7a95 100644 --- a/pom.xml +++ b/pom.xml @@ -118,7 +118,7 @@ io.ebean ebean-annotation - 5.1 + 6.1 diff --git a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java index 55640603b..829377ff0 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java +++ b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java @@ -3,7 +3,6 @@ package io.ebeaninternal.server.deploy.parse; import io.ebean.annotation.DbForeignKey; import io.ebean.annotation.FetchPreference; import io.ebean.annotation.HistoryExclude; -import io.ebean.annotation.PrivateOwned; import io.ebean.annotation.Where; import io.ebean.bean.BeanCollection.ModifyListenMode; import io.ebean.config.BeanNotRegisteredException; @@ -88,12 +87,6 @@ class AnnotationAssocManys extends AnnotationParser { prop.setModifyListenMode(ModifyListenMode.REMOVALS); prop.getCascadeInfo().setDelete(true); } - PrivateOwned privateOwned = get(prop, PrivateOwned.class); - if (privateOwned != null) { - prop.setOrphanRemoval(); - prop.setModifyListenMode(ModifyListenMode.REMOVALS); - prop.getCascadeInfo().setDelete(privateOwned.cascadeRemove()); - } OrderColumn orderColumn = get(prop, OrderColumn.class); if (orderColumn != null) { // need to cascade as we set the order on cascade diff --git a/src/test/java/org/tests/cascade/TestPrivateOwnedNoCascadeRemove.java b/src/test/java/org/tests/cascade/TestPrivateOwnedNoCascadeRemove.java deleted file mode 100644 index 473f96d88..000000000 --- a/src/test/java/org/tests/cascade/TestPrivateOwnedNoCascadeRemove.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.tests.cascade; - -import io.ebean.BaseTestCase; -import io.ebean.Ebean; -import io.ebean.annotation.IgnorePlatform; -import io.ebean.annotation.Platform; -import io.ebean.bean.BeanCollection; -import org.tests.model.basic.TSDetailTwo; -import org.tests.model.basic.TSMasterTwo; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; -import java.util.Set; - -public class TestPrivateOwnedNoCascadeRemove extends BaseTestCase { - - @IgnorePlatform(Platform.NUODB) - @Test - public void test() { - - TSMasterTwo m0 = new TSMasterTwo(); - m0.setName("m1"); - - m0.addDetail(new TSDetailTwo("m1 detail 1")); - m0.addDetail(new TSDetailTwo("m1 detail 2")); - - Ebean.save(m0); - - TSMasterTwo master = Ebean.find(TSMasterTwo.class, m0.getId()); - List details = master.getDetails(); - - TSDetailTwo removedDetail = details.remove(1); - - BeanCollection bc = (BeanCollection) details; - Set modifyRemovals = bc.getModifyRemovals(); - - Assert.assertNotNull(modifyRemovals); - Assert.assertTrue(modifyRemovals.size() == 1); - Assert.assertTrue(modifyRemovals.contains(removedDetail)); - - Ebean.save(master); - - TSMasterTwo masterReload = Ebean.find(TSMasterTwo.class, m0.getId()); - List detailsReload = masterReload.getDetails(); - - // the removed bean has really been removed - Assert.assertTrue(detailsReload.size() == 1); - - try { - Ebean.delete(masterReload); - Assert.fail("delete should error"); - } catch (Exception e) { - Assert.assertTrue("delete failed", true); - } - } - -} diff --git a/src/test/java/org/tests/inheritance/OrganizationTreeNode.java b/src/test/java/org/tests/inheritance/OrganizationTreeNode.java index ae8d4b4a6..f03850f1c 100644 --- a/src/test/java/org/tests/inheritance/OrganizationTreeNode.java +++ b/src/test/java/org/tests/inheritance/OrganizationTreeNode.java @@ -1,13 +1,12 @@ package org.tests.inheritance; -import javax.persistence.CascadeType; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.validation.constraints.NotNull; -import io.ebean.annotation.PrivateOwned; +import static javax.persistence.CascadeType.ALL; +import static javax.persistence.FetchType.LAZY; /** * Model class to reference an organization tree node. @@ -22,9 +21,8 @@ public class OrganizationTreeNode { private String name; - @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parentTreeNode") + @OneToOne(cascade = ALL, fetch = LAZY, mappedBy = "parentTreeNode", orphanRemoval = true) @NotNull - @PrivateOwned private OrganizationNode organizationNode; public Long getId() { diff --git a/src/test/java/org/tests/model/basic/AnimalShelter.java b/src/test/java/org/tests/model/basic/AnimalShelter.java index f585c9dde..761a8d4c7 100644 --- a/src/test/java/org/tests/model/basic/AnimalShelter.java +++ b/src/test/java/org/tests/model/basic/AnimalShelter.java @@ -1,14 +1,13 @@ package org.tests.model.basic; -import io.ebean.annotation.PrivateOwned; - -import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Version; import java.util.List; +import static javax.persistence.CascadeType.PERSIST; + @Entity public class AnimalShelter { @@ -20,8 +19,7 @@ public class AnimalShelter { String name; - @OneToMany(cascade = CascadeType.PERSIST, mappedBy = "shelter") - @PrivateOwned + @OneToMany(cascade = PERSIST, mappedBy = "shelter", orphanRemoval = true) List animals; public Long getId() { diff --git a/src/test/java/org/tests/model/basic/TMapSuperEntity.java b/src/test/java/org/tests/model/basic/TMapSuperEntity.java index 10d46ac47..04a054372 100644 --- a/src/test/java/org/tests/model/basic/TMapSuperEntity.java +++ b/src/test/java/org/tests/model/basic/TMapSuperEntity.java @@ -1,14 +1,11 @@ package org.tests.model.basic; -import io.ebean.annotation.UpdateMode; - import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "t_mapsuper1") -@UpdateMode(updateChangesOnly = true) public class TMapSuperEntity extends TMappedSuper2 { private static final long serialVersionUID = 1L; diff --git a/src/test/java/org/tests/model/basic/TSDetailTwo.java b/src/test/java/org/tests/model/basic/TSDetailTwo.java deleted file mode 100644 index 4ef810351..000000000 --- a/src/test/java/org/tests/model/basic/TSDetailTwo.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.tests.model.basic; - -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.Table; - -/** - * A basic entity to test simple things. - */ -@Entity -@Table(name = "ts_detail_two") -public class TSDetailTwo { - - @Id - Integer id; - - String name; - - String description; - - boolean active; - - @ManyToOne - TSMasterTwo master; - - public TSDetailTwo(String name) { - this.name = name; - } - - public TSDetailTwo() { - - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public boolean isActive() { - return active; - } - - public void setActive(boolean active) { - this.active = active; - } - - public TSMasterTwo getMaster() { - return master; - } - - public void setMaster(TSMasterTwo master) { - this.master = master; - } -} diff --git a/src/test/java/org/tests/model/basic/TSMasterTwo.java b/src/test/java/org/tests/model/basic/TSMasterTwo.java deleted file mode 100644 index 471e5ce07..000000000 --- a/src/test/java/org/tests/model/basic/TSMasterTwo.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.tests.model.basic; - -import io.ebean.annotation.PrivateOwned; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import java.util.ArrayList; -import java.util.List; - -/** - * A basic entity to test simple things. - */ -@Entity -@Table(name = "ts_master_two") -public class TSMasterTwo { - - @Id - Integer id; - - String name; - - String description; - - boolean active; - - @OneToMany(cascade = CascadeType.ALL, mappedBy = "master") - @PrivateOwned(cascadeRemove = false) - List details; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public boolean isActive() { - return active; - } - - public void setActive(boolean active) { - this.active = active; - } - - public List getDetails() { - return details; - } - - public void setDetails(List details) { - this.details = details; - } - - public void addDetail(TSDetailTwo detail) { - if (details == null) { - details = new ArrayList<>(); - } - details.add(detail); - } -} diff --git a/src/test/java/org/tests/model/embedded/EEmbOuter.java b/src/test/java/org/tests/model/embedded/EEmbOuter.java index d573e22b1..1ae4da057 100644 --- a/src/test/java/org/tests/model/embedded/EEmbOuter.java +++ b/src/test/java/org/tests/model/embedded/EEmbOuter.java @@ -1,7 +1,5 @@ package org.tests.model.embedded; -import io.ebean.annotation.PrivateOwned; - import javax.persistence.CascadeType; import javax.persistence.Embedded; import javax.persistence.Entity; @@ -20,8 +18,7 @@ public class EEmbOuter { @Version private int updateCount; - @OneToMany(cascade = CascadeType.ALL) - @PrivateOwned + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) List inners; @Embedded diff --git a/src/test/java/org/tests/model/selfref/ResourceFile.java b/src/test/java/org/tests/model/selfref/ResourceFile.java index b8e9b964f..3be5e7674 100644 --- a/src/test/java/org/tests/model/selfref/ResourceFile.java +++ b/src/test/java/org/tests/model/selfref/ResourceFile.java @@ -1,7 +1,5 @@ package org.tests.model.selfref; -import io.ebean.annotation.PrivateOwned; - import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -23,8 +21,7 @@ public class ResourceFile extends BaseResourceFile { @JoinColumn(name = "parentresourcefileid", nullable = true) private ResourceFile parent; - @OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = "parent") - @PrivateOwned + @OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = "parent", orphanRemoval = true) private Set alternatives = new HashSet<>(); @Column(name = "name", length = 128, nullable = false)