単純な「ツリー」JPA エンティティを想像してください。
public class TreeItem {
@OneToMany(mappedBy = "parentItem")
private List<TreeItem> childItems;
@ManyToOne
@JoinColumn(name = "parent_id"
private TreeItem parentItem;
@Column
private String name;
}
現在、これらのエンティティの 1 つがロードされ、Web 層に渡され、更新され、保存操作のために EJB に戻されています。私が気付いたのは、このエンティティがツリー内にどれほど深く存在していても、merge()
操作中にSQLコマンドを発行する前にツリー全体がロードされていることです。update
なぜこうなった?カスケード オプションが設定されていないため、このような動作の背後にある理由はわかりません。
更新: はい、返されたエンティティは切り離されており、その状態をデータベース レイヤーと同期する必要があります。それは私が理解していることです。しかし、私が理解していないのは、関係の怠惰を無視して、同期にツリー全体を読み取る必要がある理由です。