自定义 JPA 映射器类有一个方法:
removeUser()
1. execute 'DELETE' HQL query to remove user
2. call getEntityManager().flush();
3. call getEntityManager().clear();
如果我正确理解clear(),它将从上下文中删除所有持久实体。 -source
但是,我也读过here ,
you should define clear architecture- and design guidelines about where a
clear() can be called.
关于何时调用clear()的明确指南是什么?
最佳答案
文章对此进行了解释。清除实体管理器会清空其关联的缓存,强制稍后在事务中执行新的数据库查询。当使用事务绑定(bind)的实体管理器时,几乎不需要清除实体管理器。我认为有两个原因需要清除:
- 在进行批处理时,为了避免巨大的缓存吃掉内存并由于长时间的脏检查而增加刷新时间
- 当您执行 DML 或 SQL 查询时,这完全绕过实体管理器缓存(如您的示例中所示)。在这种情况下,由于查询,缓存保存的状态不会反射(reflect)数据库中的内容,因此您需要清除缓存以避免这种不一致。
关于hibernate - 何时使用 EntityManager.clear()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886608/