Java 使用JPA/EclipseLink延迟加载集合

Java 使用JPA/EclipseLink延迟加载集合,java,jpa,collections,lazy-loading,eclipselink,Java,Jpa,Collections,Lazy Loading,Eclipselink,有没有办法让EclipseLink单独加载集合的每个子项 我有两个实体: @Entity public class A { private List<Item> collection = new LinkedList<Item>(); @OneToMany(fetch = FetchType.LAZY) public List<Item> getCollection() { return this.collectio

有没有办法让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;
    }
}
@实体
公共A类{
私有列表集合=新建LinkedList();
@OneToMany(fetch=FetchType.LAZY)
公共列表getCollection(){
退回此项。收藏;
}
公共集合(列表集合){
this.collection=collection;
}
}
@实体
公共类项目{
专用字节[]数据;
@高球
公共字节[]getData(){
返回数据;
}
公共void setData(字节[]数据){
这个数据=数据;
}
}
我的收藏包含大量项目,因此我不希望EclipseLink在访问时加载所有子项,例如仅加载第一个项目。 但是调用a.getCollection().get(0.getData()会将集合的所有项加载到内存中。有没有办法避免这种情况?(并且只加载内存中的第一项)

添加(实际上
mappedBy
应该位于
OneToMany
端,但为了简单起见):

类,分别通过外键获取每个项:

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

其中
:a
参数是
a

的一个实例,如果您不想在集合中读取,则不要映射它。相反,只需查询它

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