我在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,则其列表将包含正确的元素。