2017-01-18 13 views
0

エンティティを1つの埋め込みコレクションで取得するための正しいJPAクエリを作成する際に問題があります。JPA 1つのエンティティ内の2つの遅延コレクション - JPAクエリを実行してエンティティと1つのコレクションのみを取得する方法

public class Entity { 

private String value; 

@OneToMany(fetch = FetchType.LAZY) 
@JoinColumn(name="entity_id") 
private List<ElementA> elementsA; 

@OneToMany(fetch = FetchType.LAZY) 
@JoinColumn(name="entity_id") 
private List<ElementB> elementsB; 

}

そして、私はJPAのクエリを実行し、エンティティやコレクション「elementsAに関する情報のみを取得したい。たとえば、私は2つのコレクション(私は両方のコレクションのためにFetchType.LAZYを持っていると思います)を持つエンティティを持っています'私はしようとしていた:

"From Entity e join fetch e.elementsA eA" 

しかし、私はエラーを持っている:

Caused by: org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection of role: 
model.jpa.entities.Entity.elementsB, 
could not initialize proxy - no Session 

私はコレクション「elementsA」に関する情報のみを取得するために、このクエリを記述する必要がありどのように。

ありがとう、Darek。

+0

FWIW JPQLは "SELECT e"で始まりますが、それは移植性がありません。 –

答えて

3

フェッチは正しいですが、セッションが閉じられた後で、コードのどこかでentity.getElementsB();が呼び出され、別のクエリ/フェッチがトリガーされ、その時点でセッションが閉じられるため、LazyInitializationExceptionになります。

関連する問題