我在one-to-many关系中有一些实体。

父母:

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

  ...
}

孩子:
@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,则其列表将包含正确的元素。

09-15 16:12