gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:26:24 28 4
gpt4 key购买 nike

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

类别

...

@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;

...

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

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

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

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

[编辑] 我读了 this topic我觉得我的问题与我的论坛正在通过与用于获取列表的 session 不同的 session 进行更新有关。我理解对吗?如果是,如何正确处理该案例?

最佳答案

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

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

关于java - JPA - 如何更新双向 OneToMany/ManyToOne 关系中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831125/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com