Reputation: 3604
I have a persistent hibernate object I obtained using session.save(object)
I changed it since.
I want to execute session.evict(object)
to save memory, as I am done with the object.
The documentation to evict()
here states that changes to the object will not be persisted. In other words - evict will cause me to lose changes I did to the object.
I could call session.flush()
but that would flush all changes.
How can I persist changes made to a single persistent object before eviction?
Upvotes: 18
Views: 79168
Reputation: 12538
Doing session.evict(obj)
will remove the object instance from the session cache. Therefore if you are saving the object for the first time, you will have to explicitly commit via session.save(obj)
before evicting the object from the cache. Subsequent update calls should follow through session.saveOrUpdate(obj)
or session.update(obj)
before calling evict to remove the loaded object from the cache.
In doing so means you will have to explicitly call session.load(obj)
or session.get(obj)
when you need the instance of the object back in the cache.
Upvotes: 4
Reputation: 6706
Call session.save(object)
or session.saveOrUpdate(object)
, then you can call evict on it if you must. However, you must flush the session before doing this. The session is designed to be a unit-of-work based interface, for good reason -- transactional semantics would be a disaster without this feature. If you need to flush individual entities without flushing others that are part of the same session, you need to rethink your unit-of-work.
Upvotes: 20
Reputation: 16262
Couldn't you manually save the object first via something like
session.saveOrUpdate(theObject);
session.evict(theObject);
Upvotes: -1