Hibernate:在存储其更改时evict()一个持久对象

我有一个持久的hibernate对象,我使用session.save(object)

我改变了。

我想执行session.evict(object)来保存内存,就像我完成了对象一样。

evict()的文档说明对象的更改不会被持久化。 换句话说 – 逐出将导致我失去对对象所做的更改。

我可以调用session.flush()但这会刷新所有更改。

如何在驱逐前坚持对单个持久对象所做的更改?

调用session.save(object)session.saveOrUpdate(object) ,如果必须,可以调用evict。 但是,您必须在执行此操作之前刷新会话。 该会话被设计为基于工作单元的接口,有充分的理由 – 事务语义将是没有此function的灾难。 如果您需要刷新单个实体而不刷新属于同一会话的其他实体,则需要重新考虑您的工作单元。

执行session.evict(obj)将从会话缓存中删除对象实例。 因此,如果您是第一次保存对象,则必须在从缓存中逐出对象之前通过session.save(obj)显式提交。 在调用evict从缓存中删除加载的对象之前,后续更新调用应遵循session.saveOrUpdate(obj)session.update(obj)

这样做意味着当您需要在缓存中返回对象的实例时,您必须显式调用session.load(obj)session.get(obj)

你不能先通过像这样的东西手动保存对象

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