2012-01-22 7 views
3

コレクションの各子が個別にEclipseLinkによってロードされる方法はありますか?JPA/EclipseLinkを使用したレイジーロードコレクション

私は2つのエンティティ持っている:

@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側にあるべきであるが、簡略化のために):Itemクラスに

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

とによって各項目をフェッチ個別外部キー::aパラメータはAのインスタンスである

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

1

コレクションを読み込みたくない場合は、マップしないでください。代わりにそれを照会するだけです。

関連する問題