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);