如何在JPA中存储树结构?

时间:2011-02-13 11:23:00

标签: 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;

1 个答案:

答案 0 :(得分:2)

对于此JPA,概念为lazy loading

在仍然在持久化上下文中迭代集合时,每次引用先前未加载的实体时,它都将按需加载。

此外,如果您事先知道需要哪些实体(您希望获取树的深度),则可以使用fetch join运算符编写投影查询(JPQL)。

最后,可能包含在JPA 2.1中的hibernate特定解决方案是所谓的fetch profiles。请参阅Fetch profilesFetch Profiles in Hibernate 3.5