0

我正在使用带有 eclipselink 和 jpa 的 spring mvc 3.0,我遇到了以下问题:我的应用程序中有这个字段:

@OneToMany(mappedBy = "stadium")
private Set<FootballMatch> footballMatches = new HashSet<FootballMatch>();

当触发某些将新项目添加到 set viaSet.add()的操作时,尽管数据库中有新行,但更改不会显示在浏览器中。当我清除浏览器缓存时,没有任何反应。我发现强制加载新值的一种方法是重新部署应用程序,即使不更改单行。所以应用程序正在返回旧值,并将其缓存在某个地方。如何强制它加载始终更新的值?我在想类似的东西getLastModified(),但我不知道我应该在哪里实现它。

4

1 回答 1

2

由于它是双向关系,因此请确保您设置了关系的双方。

见, http ://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

还要确保您正在更改、合并、提交正确的对象。

尝试使用 EntityManager.refresh() 刷新对象,你得到更新的值吗?如果你没有,那么你的数据库没有数据。

您是否在应用程序中缓存 EntityManager?如果您周围有一个旧的 EntityManager,它将看不到新的变化。通常应该为每个请求/事务创建一个新的 EntityManager。

EclipseLink 默认维护一个对象缓存,这可以使用 persistence.xml 属性“eclipselink.caching.shared”="false" 禁用

见, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

于 2010-09-21T13:33:51.420 回答