2012-03-21 4 views
1

私はクラスBatchを持っていますが、他のプロパティの中にはリストサンプル(タイプList<Sample>)があります。このリストは、多対1の関係(Sample 1-> n Batch)でマップされます。私は、それぞれのサンプルの量とともに、すべてのバッチをフェッチできる必要があります。 n + 1回のクエリを実行しなくても、これをどうすればできますか?エンティティのためのjpqlを書く方法+そのエンティティから数えますか?

また、どのようにオブジェクトにマップするのですか?

TypedQuery<Batch> query = entityManager.createQuery("select b from Batch b"Batch.class); 
List<Batch> batches = query.getResultList() 

答えて

2

バッチタイプがList<Sample>である特性を有しているように、試料にバッチの関係は、1対多数です。 Batch内のList<Sample>@OneToManyと注釈を付け、サンプル内のバッチプロパティに@ManyToOneと注釈を付ける必要があります。

n + 1の問題を回避するには、fetch joinを使用してバッチをそのサンプルリストと共にフェッチすることができます。バッチとサンプルの左結合を生成し、返されたバッチインスタンスがサンプルリストを持つようにします完全に初期化される。

SELECT batch FROM Batch batch join fetch batch.sampleList; 
関連する問題