java – Spring 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>();

  ...
}

孩子:

@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,其列表将包含正确的元素.

点赞