2
我有一個這樣的實體:CascadeType.ALL不起作用與FetchType.EAGER
@Entity
public class Directory extends Node
{
@OneToMany(cascade= CascadeType.ALL,fetch= FetchType.EAGER)
private List<Node> nodes = new ArrayList<Node>();
}
的映射是單向的。
當我使用FethType.EAGER時,級聯選項不起作用。當沒有急切的選項時,這段代碼可以很好地保存這兩個實體。這裏有什麼問題?
public void addDirectory(String name, long directoryId, User owner)
{
Directory parent = entityManager.find(Directory.class, directoryId);
Directory dir = new Directory(name,owner);
parent.add(dir);
owner.incrementRevision();
entityManager.merge(owner);
}
parent.add()只是將實體添加到集合中。
public boolean add(Node e)
{
return nodes.add(e);
}
什麼是用戶類CascadeType?我沒有看到你堅持目錄的位置。 – Pace
該目錄正在添加到已級聯設置的父級。因爲在第一行加載父項,所以父項被附加到實體管理器。 – Nefron
當然。父級連接到實體管理器,但除非在父級上調用明確的合併或持久性,否則沒有任何事情可以級聯到子級。 事務關閉時發生的隱式刷新不會自動使子持久化。您必須直接或間接(通過在父母上調用)來調用/堅持孩子,以使子實體持久化。 – Pace