使用JPA / EclipseLink延迟加载集合

时间:2012-01-22 22:44:18

标签: 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.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()会导致在内存中加载集合的所有项。有办法避免这种情况吗? (并且只加载内存中的第一项)

2 个答案:

答案 0 :(得分:1)

添加(实际上mappedBy应该在OneToMany方面,但为了简单起见):

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

Item类并分别通过外键获取每个项目:

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

其中:a参数是A的实例。

答案 1 :(得分:1)

如果您不想阅读该集合,请不要映射它。而只是查询它。