我有一些处于一对多
关系中的实体。
父级:
@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>();
...
}
child :
@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,它的列表将包含正确的元素。
关于java - Spring JPA - 一对多 - 重新养育,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54060831/