春季JPA-一对多-重新父母

时间:2019-01-06 10:57:38

标签: java spring-data-jpa

我有一些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));
}

重新创建父级之前,我看到了旧列表。 当我希望看到更新的列表时,为什么会看到旧的,过时的列表?

1 个答案:

答案 0 :(得分:1)

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

如果启动新事务并重新加载FormArea,则其列表将包含正确的元素。