休眠:在存储持久性对象的更改时逐出() 持久对象

2022-09-03 01:35:40

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

从那以后,我改变了它。

我想执行以节省内存,就像我完成对象一样。session.evict(object)

此处的文档指出,对对象的更改将不会保留。换句话说 - 驱逐将导致我失去对对象所做的更改。evict()

我可以打电话,但这会刷新所有的变化。session.flush()

如何在逐出之前保留对单个持久性对象所做的更改?


答案 1

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


答案 2

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

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


推荐