我正在使用带有Spring / Hibernate的JPA EntityManager,当我从hibernate会话更新实体然后从不同的hibernate会话查看实体时,entitymanager似乎表现得很奇怪。
我的应用程序中有以下配置:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
PersistenceContext
em
OpenEntityManagerInViewFilter
致电em.clear()
解决了这个问题。我尝试禁用二级缓存,查询缓存等但没有帮助。我希望实体经理能够处理这个问题。这是预期的吗?我正在寻找一种更清洁的方法,并取消调用em.clear()
。
答案 0 :(得分:1)
这些陈旧的实体由扩展持久化上下文管理,独立于事务。在JPA 2.0规范中,拼写如下:
请注意,当一个新事务开始时,一个托管对象 扩展持久性上下文不会从数据库重新加载。
没有任何内置功能可以自动刷新它们。您可以做的是对单个实体使用clear或EntityManager.refresh,并且可能在您的映射中级联REFRESH操作。
答案 1 :(得分:0)
我找到了问题的根本原因。这是因为我的更新和获取是从两个不同的servlet上下文完成的。我现在把它们放在相同的上下文中,它工作正常。