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