java - Spring JPA - 一对多 - 重新养育

标签 java spring-data-jpa

我有一些处于一对多关系中的实体。

父级:

@Entity
@Cacheable(false)
@Table(name="form_area")
public class FormArea {

  @OneToMany(fetch = FetchType.LAZY, mappedBy="formArea", cascade = { CascadeType.MERGE, CascadeType.PERSIST }) 
  private List<AssignableArea> assignableAreas = new ArrayList<AssignableArea>();

  ...
}

child :

@Entity
@Cacheable(false)
@Table(name="assignable_area")
public class AssignableArea {
  private @ManyToOne FormArea formArea;
  ...
}

子对象 AssignableArea 在父对象 FormArea 上也有 getter/setter。

当我使用 setFormArea() 重新设置父级时,它似乎成功了,因为数据库包含正确的信息。但是当我在 FormArea 上调用 getAssignableAreas() 时:

public List<AssignableArea> getAssignableAreas() {
  return Collections.unmodifiableList(new ArrayList<>(assignableAreas));
}

我看到了旧列表,在重新建立父关系之前。 为什么我看到的是旧的、过时的列表,而我希望看到更新后的列表?

最佳答案

最可能的原因是您已经加载了 FormArea 及其 assignableAreas 列表,并且您只更新了关联的一侧,所以另一侧保持加载时的状态:如果这对您很重要,则您有责任维护关联的双方。

如果您开始一个新事务并重新加载 FormArea,它的列表将包含正确的元素。

关于java - Spring JPA - 一对多 - 重新养育,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54060831/

相关文章:

java - 使用 IntelliJ 创建 Java 样板代码

java - 使用servlet将图像路径插入数据库

java - 仅显示一次登录 Activity ,并在下次启动主要 Activity 时显示

java - 将自定义计数器添加到 JavaMelody

postgresql - Spring Boot 应用程序对 postgres 执行大量的 SET application_name 查询

java - 我的 Java AWS Lambda 函数的 mvn 包在编译期间无法解析 Lambdalogger 类

java - spring data jpa 不必要的左连接

java - Spring JPA Java [ ORA-01861 文字与格式字符串不匹配 ]

java - 方法返回后尝试事务提交时抛出 NullPointerException

Spring boot微服务的MySQL配置