Je suis à la recherche d'une méthode éloquente pour supprimer plusieurs entités dans une transaction.Suppression via une opération en bloc HQL avec annulation
Étant donné une liste d'identifiants, j'aimerais lancer une exception si le nombre de lignes affectées diffère du nombre de listes. Actuellement, j'utilise l'extrait ci-dessous, mais il faut beaucoup de passe-partout:
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();
}
}
}
Quelques pièges:
- Ceci est une application héritée manque injection de dépendance, les transactions conduit d'annotation et d'autres raffinements. Les réponses s'apparentant à «Utiliser le ressort» ne sont pas exceptionnellement utiles.
- Nous compilons en Java 1.6.
quel est le problème avec ce code? – developer
Il y a une tonne de passe-partout. Cela fonctionne, c'est juste moche – Andreas
Au lieu de l'objet MyEntity créer un DTO avec seulement le champ d'identification –