Il n'est généralement pas recommandé d'appeler flush explicitement, sauf si cela est nécessaire. Hibernate appelle généralement automatiquement Flush à la fin de la transaction et nous devons le laisser faire son travail. Dans certains cas, il peut être nécessaire d'appeler explicitement flush lorsqu'une deuxième tâche dépend du résultat de la première tâche de persistance, les deux se trouvant dans la même transaction.
Par exemple, vous pouvez avoir besoin de persister une nouvelle entité et ensuite utiliser l'Id de cette entité pour effectuer une autre tâche dans la même transaction, dans ce cas, il est nécessaire de purger explicitement l'entité d'abord.
@Transactional
void someServiceMethod(Entity entity){
em.persist(entity);
em.flush() //need to explicitly flush in order to use id in next statement
doSomeThingElse(entity.getId());
}
Notez également que le vidage explicite ne provoque pas de validation de la base de données, une validation de la base de données n'est effectuée qu'à la fin d'une transaction, donc si une erreur d'exécution se produit après l'appel du vidage, les modifications seront toujours annulées.