protected void cascadeBeforeDelete(PersistentEntity persistentEntity, EntityAccess entityAccess,
K key, Object instance) {
List<PersistentProperty> props = persistentEntity.getPersistentProperties();
for (PersistentProperty prop : props) {
String propertyKey = getPropertyKey(prop);
if (prop instanceof OneToMany) {
OneToMany oneToMany = (OneToMany)prop;
if (oneToMany.isOwningSide() && oneToMany.doesCascade(CascadeType.REMOVE)) {
if (Collection.class.isAssignableFrom(oneToMany.getType())) {
cascadeDeleteCollection(entityAccess, oneToMany);
}
}
}
else if (prop instanceof ManyToMany) {
ManyToMany manyToMany = (ManyToMany)prop;
if (manyToMany.isOwningSide() && manyToMany.doesCascade(CascadeType.REMOVE)) {
Object propValue = entityAccess.getProperty(manyToMany.getName());
if (Collection.class.isAssignableFrom(manyToMany.getType())) {
cascadeDeleteCollection(entityAccess, manyToMany);
}
}
}
}
}