我有一个以这种方式设计的所有者(类别)和一个客户(论坛)实体:
类别
...
@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 中却不行。是否与某些缓存模式差异有关?
- 我应该如何手动注意到我的列表其中一个元素的属性已更改(例如,论坛列表中论坛的位置属性)?
[编辑] 我读了这个主题,我觉得我的问题与我的论坛被一个不同的会话更新有关,而不是用于获取列表的会话。我理解对了吗?如果是,如何正确处理这种情况?