web-dev-qa-db-fra.com

Hibernate: expulser () un objet persistant tout en stockant ses modifications

J'ai un objet d'hibernation persistant que j'ai obtenu en utilisant session.save(object)

Je l'ai changé depuis.

Je veux exécuter session.evict(object) pour économiser de la mémoire, comme j'en ai fini avec l'objet.

La documentation de evict()ici indique que les modifications apportées à l'objet ne seront pas conservées. En d'autres termes, l'expulsion me fera perdre les modifications que j'ai apportées à l'objet.

Je pourrais appeler session.flush() mais cela annulerait toutes les modifications.

Comment puis-je conserver les modifications apportées à un seul objet persistant avant l'expulsion?

17
Roman Zenka

Appelez session.save(object) ou session.saveOrUpdate(object), vous pouvez alors appeler expulser si nécessaire. Cependant, vous devez vider la session avant de procéder. La session est conçue pour être une interface basée sur l'unité de travail, pour une bonne raison - la sémantique transactionnelle serait un désastre sans cette fonctionnalité. Si vous devez vider des entités individuelles sans vider d'autres qui font partie de la même session, vous devez repenser votre unité de travail.

18
jonathan.cone

Faire session.evict(obj) supprimera l'instance d'objet du cache de session. Par conséquent, si vous enregistrez l'objet pour la première fois, vous devrez valider explicitement via session.save(obj) avant d'expulser l'objet du cache. Les appels de mise à jour suivants doivent suivre session.saveOrUpdate(obj) ou session.update(obj) avant d'appeler evict pour supprimer l'objet chargé du cache.

Ce faisant, vous devrez appeler explicitement session.load(obj) ou session.get(obj) lorsque vous aurez besoin de l'instance de l'objet dans le cache.

4
Bitmap