2

我有一个以这种方式设计的所有者(类别)和一个客户(论坛)实体:

类别

...

@OneToMany( fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category" )
@OrderBy( "position" )
private List<Forum> forums;

...

论坛

...

@ManyToOne
@JoinColumn( name = "category" )
private Category category;

private Integer        position;

...

在我的 web 应用程序的某处,我显示了论坛列表,并对其中一个执行了一些业务操作,例如更改其位置。

我的问题是更改很好地保留在数据库中,但未反映在 OneToMany 映射集合上。因此,当我刷新显示列表的页面时,它不会显示新位置,而是显示前一个位置。

我用来更新元素位置的代码相当于一个简单的em.merge( forum ). 我在许多主题中读到我应该“手动管理”双向关系,否则我会面临这种问题。这是我的两个问题:

  • 我在 EclipseLink 和 Hibernate 上都试过了,虽然它与 Hibernate 配合得很好(列表已更新),但在 EclipseLink 中却不行。是否与某些缓存模式差异有关?
  • 我应该如何手动注意到我的列表其中一个元素的属性已更改(例如,论坛列表中论坛的位置属性)?

[编辑] 我读了这个主题,我觉得我的问题与我的论坛被一个不同的会话更新有关,而不是用于获取列表的会话。我理解对了吗?如果是,如何正确处理这种情况?

4

1 回答 1

1

假设您设置了对象的两侧(您必须这样做!),请尝试禁用 eclipselink 缓存: <property name="eclipselink.cache.shared.default" value="false"/>

@source http://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F

于 2013-11-07T08:58:13.617 回答