2011-02-26 66 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