2011-02-13 139 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