2011-02-26 65 views
0

我有一个数据库,其中包含指向父子关系中其他节点的节点以及用于在网络地址和节点之间进行转换的查找表。我怎样才能决定在JPA中加载多少数据?

我需要得到有关节点的信息,它是父母和孩子,但每次我通过查找表获取一个节点时,它只会加载与该节点(名称等)有关的数据是否有任何方式可以超越这个延迟加载并获取更多数据?

我的数据结构:

NodeLookup: 
    long id; 
    String url; 
    Node node; 

Node: 
    long id; 
    String name; 
    List<Node> parents; //@ManyToMany 
    List<Node> childrens; //@ManyToMany 

现在,我通过获取通过NodeLookup表中的节点解决它,并使用该节点的ID来获取真正的节点,但是这似乎是资源的浪费。

(我使用的是发挥框架)

回答

1

默认情况下,JPA使用懒负载的关系。如果你想加载的关系,当你加载节点,你必须使用急切的加载:

@ManyToMany(fetch=FetchType.EAGER) 
List<Node> parents; 

@ManyToMany(fetch=FetchType.EAGER 
List<Node> childrens; 
+0

是的,接缝工作,谢谢。但这是否意味着它会加载所有的孩子和孩子的孩子等等?有没有办法限制被加载的深度? – UllaBulla 2011-02-26 14:19:17

+0

我想,你必须删除急切的负载,只需调用控制器或模型中的孩子和父母的size()方法,当你想加载它们时 – Ricardo 2011-02-26 15:28:07

+0

我早些时候尝试过,但它似乎没有工作..会给它另一个尝试。 – UllaBulla 2011-02-26 17:52:41