2011-02-13 142 views
2

我需要存儲大量節點與彼此之間的多對多關係(通過父母/孩子)。我如何在JPA中做到這一點?如何在JPA中存儲樹結構?

我知道我可以在我的父母/孩子名單上使用@ManyToMany,但是JPA會加載所有父母和他們的父母等等。有什麼辦法可以做到這一點,只能讓父母或孩子離開一步?

非工作代碼,我現在(的Node.java)有:

public String name; 

@ManyToMany 
@JoinTable(name = "NodeParent") 
public List<Node> parents; 

@ManyToMany 
@JoinTable(name = "NodeChilds") 
public List<Node> childrens; 

回答

2

對於這個JPA有概念運算lazy loading

當仍然在持久化上下文中迭代集合時,每次引用一個先前未加載的實體時,它都會按需加載。此外,如果您事先知道需要哪些實體(想要獲取樹的深度),則可以使用fetch join運算符編寫投影查詢(JPQL)。

最後,可能包含在JPA 2.1中的hibernate特定解決方案是所謂的fetch profiles。見Fetch profilesFetch Profiles in Hibernate 3.5