我正在使用Eclipselink和JPA的Spring MVC 3.0,并且正在遇到以下问题:我的应用程序中有此字段:

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

当触发一些操作时,将新项目添加到集合中 Set.add(), ,这些更改并未在浏览器中显示,尽管数据库中有新行。当我清除浏览器缓存时,什么也不会发生。我发现,即使没有单行更改,也可以将新值强制负载的方法进行重新部署。因此,该应用程序正在返回旧值,将其缓存在某个地方。如何强制它加载Allways更新值?我在想像 getLastModified(), ,但我不知道我应该在哪里实施它。

有帮助吗?

解决方案

由于这是双向关系,因此请确保您正在建立关系的双方。

看,http://en.wikibooks.org/wiki/java_persistence/relationships#object_corruption.2c_one_side_of_the_relationship_is_is_is_not_updated_after_after_after_after_after_updating_the_the_other_side_side

还要确保您正在更改,合并,合并正确的对象。

尝试使用entitymanager.refresh()刷新对象,您是否获得更新值?如果您不这样做,那么您的数据库将没有数据。

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

eClipSelink默认维护对象缓存,可以使用persistence.xml属性“ eclipselink.caching.shared” =“ false”禁用此对象缓存。

看,http://wiki.eclipse.org/eclipselink/examples/jpa/caching

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top