我有一些实体处于一对多的关系中.
父母:
@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,其列表将包含正确的元素.