diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java b/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java index fdb38088c..ad296978c 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java +++ b/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java @@ -204,7 +204,9 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST public void initialisePostTarget() { if (childMasterProperty != null) { BeanProperty masterId = childMasterProperty.getTargetDescriptor().getIdProperty(); - childMasterIdProperty = childMasterProperty.getName() + "." + masterId.getName(); + if (masterId != null) { // in docstore only, the master-id may be not available + childMasterIdProperty = childMasterProperty.getName() + "." + masterId.getName(); + } } } diff --git a/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java b/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java index 2c5c70073..afb91da5f 100644 --- a/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java +++ b/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java @@ -84,15 +84,17 @@ class DeleteUnloadedForeignKeys { */ void deleteCascade() { - for (BeanPropertyAssocOne prop : propList) { - Object detailBean = prop.getValue(beanWithForeignKeys); + if (beanWithForeignKeys != null) { + for (BeanPropertyAssocOne prop : propList) { + Object detailBean = prop.getValue(beanWithForeignKeys); - // if bean exists with a unique id then delete it - if (detailBean != null && prop.hasId((EntityBean) detailBean)) { - if (deletePermanent) { - server.deletePermanent(detailBean, request.getTransaction()); - } else { - server.delete(detailBean, request.getTransaction()); + // if bean exists with a unique id then delete it + if (detailBean != null && prop.hasId((EntityBean) detailBean)) { + if (deletePermanent) { + server.deletePermanent(detailBean, request.getTransaction()); + } else { + server.delete(detailBean, request.getTransaction()); + } } } } diff --git a/src/test/java/org/tests/family/TestInheritance.java b/src/test/java/org/tests/family/TestInheritance.java index de4ea30d5..a24127737 100644 --- a/src/test/java/org/tests/family/TestInheritance.java +++ b/src/test/java/org/tests/family/TestInheritance.java @@ -1,6 +1,7 @@ package org.tests.family; import io.ebean.BaseTestCase; +import io.ebean.Ebean; import io.ebean.annotation.IgnorePlatform; import io.ebean.annotation.Platform; import io.ebeaninternal.server.deploy.BeanDescriptor; @@ -218,6 +219,10 @@ public class TestInheritance extends BaseTestCase { assertEquals("Foo", grandparent1.getFamilyName()); assertEquals("Munich", grandparent1.getAddress()); assertEquals(1, grandparent1.getEffectiveBean().getId().intValue()); + + Ebean.find(ChildPerson.class).delete(); + Ebean.find(GrandParentPerson.class).delete(); + Ebean.find(EBasic.class).delete(); } @Test @@ -260,5 +265,8 @@ public class TestInheritance extends BaseTestCase { count = server().find(GrandParentPerson.class).where().eq("basicSameName.description", "Description A").findCount(); assertEquals(1, count); + Ebean.find(ChildPerson.class).delete(); + Ebean.find(GrandParentPerson.class).delete(); + Ebean.find(EBasic.class).delete(); } }