FIX: possible NPE in DeleteUnloadedForeignKeys.deleteCascade and in initPostTarget (#1601)

This commit is contained in:
Roland Praml
2019-01-08 22:41:43 +13:00
committed by Rob Bygrave
parent 50de32af29
commit b18bc82b8a
3 changed files with 21 additions and 9 deletions
@@ -204,7 +204,9 @@ public class BeanPropertyAssocMany<T> extends BeanPropertyAssoc<T> 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();
}
}
}
@@ -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());
}
}
}
}
@@ -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();
}
}