是否有任何方法可以通过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()会导致在内存中加载集合的所有项。有办法避免这种情况吗? (并且只加载内存中的第一项)
答案 0 :(得分:1)
添加(实际上mappedBy
应该在OneToMany
方面,但为了简单起见):
@ManyToOne(mapped="collection")
private A a;
到Item
类并分别通过外键获取每个项目:
SELECT i
FROM Item i
WHERE i.a = :a
其中:a
参数是A
的实例。
答案 1 :(得分:1)
如果您不想阅读该集合,请不要映射它。而只是查询它。