Ленивая загрузка коллекций с JPA / EclipseLink - PullRequest
3 голосов
/ 23 января 2012

Есть ли способ, которым каждый дочерний элемент коллекции будет загружаться 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 ]

1 голос
/ 23 января 2012

Если вы никогда не хотите читать в коллекции, не отображайте ее. Вместо этого просто запросите его.

1 голос
/ 23 января 2012

Добавить (на самом деле mappedBy должно быть скорее на стороне OneToMany, но для простоты):

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

к классу Item и извлекать каждый элемент по внешнему ключу индивидуально:

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

Где :a параметр является экземпляром A.

...