Ich bin auf der Suche nach einem eloquenten Weg, mehrere Entitäten innerhalb einer Transaktion zu löschen.Delete über HQL Bulk-Operation mit Rollback
Angesichts einer Liste von IDs möchte ich eine Ausnahme auslösen, wenn die Anzahl der betroffenen Zeilen von der Liste Anzahl unterscheidet. Zur Zeit benutze ich das unten Schnipsel, aber es viel vorformulierten beinhaltet:
private int deleteMyEntities(final List<Integer> ids) {
final Session session = SomeHelper.getOpenSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
final int affectedCount = session.createQuery("delete MyEntity where id in (:ids)")
.setParameterList("ids", ids)
.executeUpdate();
if (affectedCount == ids.size()) {
tx.commit();
tx = null;
return affectedCount;
} else {
throw new HibernateException("Delete count does not match target count.");
}
} finally {
if (tx != null) {
tx.rollback();
}
}
}
Einige gotchas:
- ein Vermächtnis app fehlt Abhängigkeit Nettigkeiten Dies wird Injektion, Kommentierung Transaktionen und andere. Antworten wie "Verwenden Sie den Frühling" sind nicht besonders hilfreich.
- Wir kompilieren zu Java 1.6.
, was ist das Problem mit diesem Code? – developer
Es gibt eine Tonne Boilerplate. Es funktioniert, es ist nur hässlich – Andreas
Anstelle von MyEntity-Objekt erstellen Sie ein DTO mit nur ID-Feld –