Question Hibernate: expulsez () 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 je l’ai fait avec l’objet.

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

Je pourrais appeler session.flush() mais cela effacerait tous les changements.

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


14
2017-07-26 20:40


origine


Réponses:


Appel session.save(object) ou session.saveOrUpdate(object), alors vous pouvez appeler l'expulsion si vous le devez. Cependant, vous devez vider la session avant de le faire. 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 une catastrophe sans cette fonctionnalité. Si vous avez besoin de vider des entités individuelles sans en vider d'autres qui font partie de la même session, vous devez repenser votre unité de travail.


16
2017-07-26 20:43



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

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


3
2017-07-26 20:52



Est-ce que vous ne pouviez pas sauvegarder manuellement l'objet via quelque chose comme

session.saveOrUpdate(theObject);
session.evict(theObject);

-1
2017-07-26 20:44