想象一下简单的“树”JPA 实体:
public class TreeItem {
@OneToMany(mappedBy = "parentItem")
private List<TreeItem> childItems;
@ManyToOne
@JoinColumn(name = "parent_id"
private TreeItem parentItem;
@Column
private String name;
}
现在,这些实体之一正在被加载、传递到 Web 层、更新并传递回 EJB 以进行保存操作。我注意到的是,在merge()
操作过程中,在发出update
sql 命令之前加载整个树,无论该实体在树中驻留多深。为什么会这样?我看不出这种行为背后的任何原因,因为我没有设置级联选项。
更新: 是的,传回的实体是分离的,需要将其状态与数据库层同步,这就是我所理解的。但我不明白的是,为什么同步需要阅读整棵树,而不考虑关系的懒惰。