浏览代码

Refactor bulk delete method (#12)

Merge branch 'master' into kris/refactor_bulk_delete_methods

Allow null as parameters in bulk delete method

Use StringBuilder instead of appending Strings

Use strict types instead of var

Add new method for bulk delete with old signature

Do not use SingletonMap so it may appended

Set bulkDelete's parameters to be non null

Refactor bulkDelete methods

Co-authored-by: jonathan <jonathan@noreply.git.bubblev.org>
Co-authored-by: Kristijan Mitrovic <kmitrovic@itekako.com>
Reviewed-on: https://git.bubblev.org/bubblev/cobbzilla-wizard/pulls/12
tags/2.0.1
Kristijan Mitrovic 4 年前
committed by jonathan
父节点
当前提交
e2783ac80f
共有 1 个文件被更改,包括 22 次插入23 次删除
  1. +22
    -23
      wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java

+ 22
- 23
wizard-server/src/main/java/org/cobbzilla/wizard/dao/AbstractCRUDDAO.java 查看文件

@@ -302,13 +302,13 @@ public abstract class AbstractCRUDDAO<E extends Identifiable>
+ " SET " + String.join(" IS NULL, ", setFields) + " IS NULL"
+ whereClause);
} else {
final var setFieldsSQLPart = Arrays.stream(setFields)
.map(s -> s + (s == null ? " IS NULL" : " = :" + s))
.collect(Collectors.joining(", "));
final String setFieldsSQLPart = Arrays.stream(setFields)
.map(s -> s + (s == null ? " IS NULL" : " = :" + s))
.collect(Collectors.joining(", "));
queryBase = session.createQuery("UPDATE " + getEntityClass().getSimpleName()
+ " SET " + setFieldsSQLPart
+ whereClause);
for (var i = 0; i < setValues.length; i++) {
for (int i = 0; i < setValues.length; i++) {
if (setValues[i] != null) queryBase.setParameter(setFields[i], setValues[i]);
}
}
@@ -339,31 +339,30 @@ public abstract class AbstractCRUDDAO<E extends Identifiable>

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);
private int bulkDelete(@NonNull final String field, @Nullable final Object value, final boolean notUuid) {
if (value == null) return bulkDeleteWhere(field + " IS NULL");

final StringBuilder condition = new StringBuilder(field).append(" = :").append(field);
final HashMap<String, Object> params = new HashMap<>();
params.put(field, value);

if (notUuid) {
condition.append(" AND uuid != :").append(EX_UUID);
params.put(EX_UUID, value);
}
final int count = query.executeUpdate();
session.setFlushMode(FlushMode.COMMIT);
session.flush();
return count;

return bulkDeleteWhere(condition.toString(), params);
}

public int bulkDeleteWhere(@NonNull final String whereClause) {
return bulkDeleteWhere(whereClause, null);
}

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 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();


正在加载...
取消
保存