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 1981b65..d2b9354 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 @@ -8,6 +8,7 @@ package org.cobbzilla.wizard.dao; import lombok.Getter; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.map.SingletonMap; import org.cobbzilla.util.reflect.ReflectionUtil; import org.cobbzilla.wizard.api.CrudOperation; import org.cobbzilla.wizard.model.AuditLog; @@ -340,30 +341,23 @@ public abstract class AbstractCRUDDAO public static final String EX_UUID = "__exclude_uuid__"; private int bulkDelete(String field, Object value, boolean notUuid) { - final Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); - final Query query; - final String deleteSql = "DELETE FROM " + getEntityClass().getSimpleName() + " WHERE "; - if (value == null) { - query = session.createQuery(deleteSql + field + " IS NULL"); - - } else if (notUuid) { - query = session.createQuery(deleteSql + field + " = :" + field + " AND uuid != :" + EX_UUID) - .setParameter(field, value) - .setParameter(EX_UUID, value); - } else { - query = session.createQuery(deleteSql + field + " = :" + field) - .setParameter(field, value); + if (value == null) return bulkDeleteWhere(field + " IS NULL", null); + + if (notUuid) { + final var params = new HashMap(); + params.put(field, value); + params.put(EX_UUID, value); + return bulkDeleteWhere(field + " = :" + field + " AND uuid != :" + EX_UUID, params); } - final int count = query.executeUpdate(); - session.setFlushMode(FlushMode.COMMIT); - session.flush(); - return count; + + return bulkDeleteWhere(field + " = :" + field, new SingletonMap(field, value)); } - public int bulkDeleteWhere(String whereClause) { + public int bulkDeleteWhere(@NonNull final String whereClause, @Nullable final Map parameters) { final Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); final String deleteSql = "DELETE FROM " + getEntityClass().getSimpleName() + " WHERE " + whereClause; final Query query = session.createQuery(deleteSql); + if (!empty(parameters)) parameters.forEach(query::setParameter); final int count = query.executeUpdate(); session.setFlushMode(FlushMode.COMMIT); session.flush();