JPA EntityManager返回没有entityManager.clear的陈旧值

时间:2012-07-19 10:10:40

标签: spring hibernate jpa

我正在使用带有Spring / Hibernate的JPA EntityManager,当我从hibernate会话更新实体然后从不同的hibernate会话查看实体时,entitymanager似乎表现得很奇怪。

我的应用程序中有以下配置:

  1. EHCache和启用二级缓存
  2. 关于实体的
  3. @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
  4. PersistenceContext
  5. 上展开em
  6. OpenEntityManagerInViewFilter
  7. 致电em.clear()解决了这个问题。我尝试禁用二级缓存,查询缓存等但没有帮助。我希望实体经理能够处理这个问题。这是预期的吗?我正在寻找一种更清洁的方法,并取消调用em.clear()

2 个答案:

答案 0 :(得分:1)

这些陈旧的实体由扩展持久化上下文管理,独立于事务。在JPA 2.0规范中,拼写如下:

  

请注意,当一个新事务开始时,一个托管对象   扩展持久性上下文不会从数据库重新加载。

没有任何内置功能可以自动刷新它们。您可以做的是对单个实体使用clear或EntityManager.refresh,并且可能在您的映射中级联REFRESH操作。

答案 1 :(得分:0)

我找到了问题的根本原因。这是因为我的更新和获取是从两个不同的servlet上下文完成的。我现在把它们放在相同的上下文中,它工作正常。