diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java b/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java index 9043e09..0f9bff8 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java @@ -246,6 +246,13 @@ public abstract class AbstractCRUDDAO } } + public void bulkDelete(String field, String value) { + getHibernateTemplate().getSessionFactory().openStatelessSession() + .createQuery("DELETE FROM "+getEntityClass().getSimpleName()+" WHERE "+field+" = :"+field) + .setString(field, value) + .executeUpdate(); + } + @Transactional(readOnly=true) @Override public E findByUniqueField(String field, Object value) { return uniqueResult(value == null ? isNull(field) : eq(field, value)); diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java index 63000c1..681f519 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/PgRestServerConfiguration.java @@ -15,6 +15,7 @@ import org.cobbzilla.util.jdbc.UncheckedSqlException; import org.cobbzilla.util.string.StringUtil; import org.cobbzilla.util.system.Command; import org.cobbzilla.util.system.CommandResult; +import org.cobbzilla.wizard.dao.AbstractCRUDDAO; import org.cobbzilla.wizard.dao.DAO; import org.cobbzilla.wizard.model.Identifiable; import org.cobbzilla.wizard.model.entityconfig.EntityFieldReference; @@ -343,7 +344,11 @@ public class PgRestServerConfiguration extends RestServerConfiguration implement dependencyRefs(thing.getClass()).forEach( dep -> { final DAO dao = getDaoForEntityClass(dep.getEntity()); - dao.delete(dao.findByField(dep.getField(), thing.getUuid())); + if (dao instanceof AbstractCRUDDAO) { + ((AbstractCRUDDAO) dao).bulkDelete(dep.getField(), thing.getUuid()); + } else { + dao.delete(dao.findByField(dep.getField(), thing.getUuid())); + } } ); }