Engagez fera valider la base de données. Les modifications apportées à l'objet persistant seront écrites dans la base de données.Flushing est le processus de synchronisation le magasin persistant sous-jacent avec un état persistant conservé dans memory.ie. il mettra à jour ou insérera dans vos tables dans la transaction en cours, mais il peut ne validez pas ces modifications (cela dépend de votre mode de vidage).
Lorsque vous avez un objet persistant et que vous modifiez une valeur dessus, il devient sale et hibernate doit effacer ces modifications dans votre couche de persistance. Il peut le faire automatiquement pour vous ou vous devrez peut-être le faire manuellement, cela dépend de votre mode de chasse (auto ou manuel) :)
Donc en bref :transaction.commit() vide la session, mais met également fin à l'unité de travail.
Il existe une référence similaire à votre problème ici