diff --git a/src/main/java/org/caosdb/server/database/access/AbstractAccess.java b/src/main/java/org/caosdb/server/database/access/AbstractAccess.java
index 46e10adb476112a04d09a0d577eca810088044c0..1d30bd3fee7187b9c44378e5b94c1c6d97287f00 100644
--- a/src/main/java/org/caosdb/server/database/access/AbstractAccess.java
+++ b/src/main/java/org/caosdb/server/database/access/AbstractAccess.java
@@ -25,7 +25,6 @@ package org.caosdb.server.database.access;
 import java.util.HashMap;
 import org.caosdb.server.database.misc.DBHelper;
 import org.caosdb.server.database.misc.RollBackHandler;
-import org.caosdb.server.query.NoCache;
 import org.caosdb.server.transaction.TransactionInterface;
 
 public abstract class AbstractAccess<T extends TransactionInterface> implements Access {
@@ -79,8 +78,8 @@ public abstract class AbstractAccess<T extends TransactionInterface> implements
     this.useCache = useCache;
   }
   /**
-   * Whether the transaction allows to use the query cache or other caches. This is controlled
-   * by the "cache" flag.
+   * Whether the transaction allows to use the query cache or other caches. This is controlled by
+   * the "cache" flag.
    *
    * @see {@link NoCache}
    * @return true if caching is encouraged.
diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java
index ee3a971292ea3ecde3c68ca1c34ff935a6301770..d8fd5d7561735040a47619191611ae15652b40c4 100644
--- a/src/main/java/org/caosdb/server/query/Query.java
+++ b/src/main/java/org/caosdb/server/query/Query.java
@@ -692,7 +692,6 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
     }
   }
 
-
   /**
    * Try to set the `resultSet` member variable using the values stored in the high level query
    * cache.
@@ -861,24 +860,26 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
      * with (acl_id, acl) and a table with (entity_id, acl_id) to reduce the
      * amount of data being transfered.
      */
-    final Statement stmt = this.getConnection().createStatement();
-
-    final String query =
-        ("SELECT entity_n_acl.id, entity_acl.acl from "
-            + "(select entities.id, entities.acl from entities "
-            + "inner join `"
-            + tabname
-            + "` as rs on entities.id=rs.id) "
-            + "as entity_n_acl "
-            + "left join entity_acl on entity_n_acl.acl=entity_acl.id;");
-    final ResultSet entitiesRS = stmt.executeQuery(query);
-    final ResultSetIterator entitiesWithACL = new ResultSetIterator(entitiesRS);
-    final List<Integer> toBeDeleted = collectIdsWithoutPermission(entitiesWithACL);
-    entitiesRS.close();
-
-    // TODO is there a better way than the following?
-    for (final Integer id : toBeDeleted) {
-      stmt.execute("DELETE FROM `" + tabname + "` WHERE id = " + id);
+
+    try (final Statement stmt = this.getConnection().createStatement()) {
+      final String query =
+          ("SELECT entity_n_acl.id, entity_acl.acl from "
+              + "(select entities.id, entities.acl from entities "
+              + "inner join `"
+              + tabname
+              + "` as rs on entities.id=rs.id) "
+              + "as entity_n_acl "
+              + "left join entity_acl on entity_n_acl.acl=entity_acl.id;");
+      final ResultSet entitiesRS = stmt.executeQuery(query);
+      final ResultSetIterator entitiesWithACL = new ResultSetIterator(entitiesRS);
+      final List<Integer> toBeDeleted = collectIdsWithoutPermission(entitiesWithACL);
+      try (final PreparedStatement pstmt =
+          this.getConnection().prepareStatement("DELETE FROM `" + tabname + "` WHERE id = ?")) {
+        for (final Integer id : toBeDeleted) {
+          pstmt.setInt(1, id);
+          pstmt.execute();
+        }
+      }
     }
   }