繁体   English   中英

JPA-如何在双向OneToMany / ManyToOne关系中更新集合

[英]JPA - How to update a collection in a bi-directionnal OneToMany/ManyToOne relation

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

类别

...

@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映射的collection上 因此,当我刷新显示列表的页面时,它不会显示新位置,而是显示前一个位置。

我用来更新元素位置的代码等效于一个简单的em.merge( forum ) 我读过许多主题,我应该“手动管理”双向关系,否则我将面临此类问题。 这是我的两个问题:

  • 我在EclipseLink和Hibernate上都进行了尝试,尽管它与Hibernate兼容(列表已更新),但在EclipseLink中却没有。 它与某些缓存模式的差异有关吗?
  • 我应该如何手动注意到列表中其元素的一个属性已更改(例如,论坛在列表中的position属性)?

[编辑]我读了这个话题 ,我觉得我的问题与论坛被另一个用于获取列表的会话所更新有关。 我理解正确吗? 是,如何正确处理?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM