2012-01-22 77 views
3

有什麼方法可以讓EclipseLink單獨加載集合的每個子項?使用JPA/EclipseLink延遲加載集合

我有兩個實體:

@Entity 
public class A { 

    private List<Item> collection = new LinkedList<Item>(); 

    @OneToMany(fetch = FetchType.LAZY) 
    public List<Item> getCollection() { 
     return this.collection; 
    } 

    public void setCollection (List<Item> collection) { 
     this.collection = collection; 
    } 
} 

@Entity 
public class Item { 

    private byte[] data; 

    @Lob 
    public byte[] getData() { 
     return data; 
    } 

    public void setData(byte[] data) { 
     this.data = data; 
    } 
} 

我的收藏中包含大量的項目,所以我不想當的EclipseLink我訪問例如加載所有的孩子只有第一個項目。 但調用a.getCollection()。get(0).getData()導致加載內存中的所有集合項。有沒有辦法避免這種情況? (而且只加載在內存中的第一項)

回答

1

添加(實際上mappedBy而應是在OneToMany的一面,但爲了簡單起見):

@ManyToOne(mapped="collection") 
private A a; 

Item類和取每個項目個別外鍵:

SELECT i 
FROM Item i 
WHERE i.a = :a 

哪裏:a參數爲A一個實例。

1

如果你永遠不想讀取集合,那麼不要映射它。而只是查詢它。