我需要存储大量具有多对多关系的节点(通过父母/子女)。我怎么能在JPA中做到这一点?
我知道我可以在我的父母/孩子名单上使用@ManyToMany但是JPA会加载所有父母和他们的父母等等吗?我有什么方法可以做到这一点,只把父母或孩子加载一步之后?
我现在拥有的非工作代码(Node.java):
public String name;
@ManyToMany
@JoinTable(name = "NodeParent")
public List<Node> parents;
@ManyToMany
@JoinTable(name = "NodeChilds")
public List<Node> childrens;
答案 0 :(得分:2)
对于此JPA,概念为lazy loading
。
在仍然在持久化上下文中迭代集合时,每次引用先前未加载的实体时,它都将按需加载。
此外,如果您事先知道需要哪些实体(您希望获取树的深度),则可以使用fetch join
运算符编写投影查询(JPQL)。
最后,可能包含在JPA 2.1中的hibernate特定解决方案是所谓的fetch profiles
。请参阅Fetch profiles和Fetch Profiles in Hibernate 3.5。