一尘不染

何时使用EntityManager.clear()?

hibernate

定制JPA映射器类具有以下方法:

removeUser()

1. execute 'DELETE' HQL query to remove user
2. call getEntityManager().flush();
3. call getEntityManager().clear();

如果我正确理解clear(),它将从上下文中删除所有持久性实体。-资源

但是,我也在这里阅读,

you should define clear architecture- and design guidelines about where a 
clear() can be called.

关于何时调用clear()的明确准则是什么?


阅读 1110

收藏
2020-06-20

共1个答案

一尘不染

文章对此进行了解释。清除实体管理器将清空其关联的缓存,从而迫使新的数据库查询在事务中稍后执行。使用事务绑定的实体管理器时,几乎几乎不需要清除实体管理器。我看到有两个原因需要清除:

  • 在进行批处理时,为了避免由于长时间的脏检查而导致巨大的缓存占用内存并增加刷新时间
  • 当您执行DML或SQL查询时,它们完全绕过了实体管理器缓存(如您的示例)。在这种情况下,由于查询的原因,缓存保留的状态无法反映数据库中的内容,因此您希望清除缓存以避免这种不一致。
2020-06-20