2012-01-22 5 views
3

Есть ли способ, которым каждый ребенок коллекции будет загружать отдельно EclipseLink?Lazy загрузки коллекций с JPA/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() приводит к загрузке всех элементов коллекции в память. Есть ли способ избежать этого? (И только загружая первый элемент в памяти)

ответ

1

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

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

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

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

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

1

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

Смежные вопросы