2012-01-22 2 views
3

컬렉션의 각 하위가 EclipseLink에 의해 개별적으로로드되는 방식이 있습니까?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 측에해야하지만, 간단하게하기 위해) 다음 Item 클래스에

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

하고 각 항목을 가져 오기 개별적으로 외래 키 : :a 매개 변수 A의 인스턴스

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

.

1

컬렉션을 읽지 않으려면 매핑하지 마십시오. 대신 그냥 쿼리하십시오.