Hibernate:在存储其更改时逐出()evict()

Rom*_*nka 17 java session hibernate memory-management

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

我改变了.

我想执行session.evict(object)以节省内存,因为我完成了对象.

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

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

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

jon*_*one 18

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

  • 我认为`save()`方法仅用于将瞬态对象(不是由Hibernate管理)转换为持久对象.并且`saveOrUpdate()`将在瞬态或分离对象上工作.但是,我的对象是持久的,它已经被Hibernate创建并且以前保存过了,但是从那时起它就改变了. (2认同)
  • 这是批处理操作吗?即你是插入大量的行?如果是这样,请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#batch-inserts.如果没有,你为什么要这样做? (2认同)