Un problème auquel je suis souvent confronté avec Hibernate est d'avoir une liste (appelez-la listA) d'objets que je veux persister contre une entité (myEntity) mais de les comparer d'abord à la liste existante sur l'entité et supprimer ceux qui ne sont pas dans la listeA. La manière simple de faire ceci est effacer la liste sur l'Entité et ajouter juste tout de la listeA à l'entité, cependant je dois souvent effectuer une certaine validation sur les éléments avant qu'ils soient supprimés - par exemple. pour vérifier si cet utilisateur est autorisé à les supprimer.Hibernate: Meilleure façon de supprimer des éléments dans une collection
Mon approche actuelle se sent maladroit:
//Delete the elements that have been removed
//Use toArray to avoid ConcurrentModificationException
for(ObjectA a : myEntity.getObjectAList().toArray(new ObjectA[myEntity.getObjectAList().size()])) {
if(!listA.contains(a)) {
//Check if this element can be deleted
if(canDelete(a)) {
entityManager.remove(a);
myEntity.getObjectAList().remove(a);
}
}
}
//Add the elements that don't already exist
for(ObjectA a : listA) {
if(!myEntity.getObjectAList().contains(a)) {
myEntity.getObjectAList().add(a);
}
}
Toute place à l'amélioration?
Merci.
Je ne peux pas utiliser removeAll() car j'ai besoin d'effectuer une validation sur les éléments individuellement avant les supprimer. Merci pour le conseil de l'itérateur. – Damo
Je pense que le but de removeAll était de réduire la liste de vos objets à ceux dont vous avez besoin de vérifier la suppression. Ensuite, vous vérifiez tous ceux et supprimez si autorisé. Ensuite, vous pouvez ajouter toute la listeA sans vérifier si elles sont déjà présentes parce que vous les avez déjà supprimées. – digitaljoel