2016-08-21 8 views
0

私はB.property > 5春データ・ロード・子供とクエリ

すべて B秒でロード myBsコレクションとAをロードする春・データ-JPA /休止/ mysqlの

class A{ 
    private long id; 
    private Collection<B> myBs; 
} 

class B{ 
    private long id; 
    private int property; 
} 

を使用しています

private interface ARepository extends JpaRepository<A, Long>{ 

@Query("SELECT a, b " 
     + "FROM A a JOIN a.myBs b ON b.property > :prop" 
     + "WHERE a.id= :id ") 
public A getByIdPastB(@Param("id") long id, @Param("prop") Integer prop); 
} 

しかし、私はあまりにも多くのように、データストアから取得していることを例外を取得:

ので、私はこれをしませんでした。基本的には、テーブル

_______________________________ 
A.id | B.id | B.a_id| B.prop 
2  | 1  | 2  | 8 
2  | 2  | 2  | 11 
2  | 3  | 2  | 7 

を取得し、代わりに一つのオブジェクトを構築し、3つのBオブジェクトを移入するのではなく、1つのBのオブジェクトそれぞれに3 Aオブジェクトを構築しようとしています。

ここでフェッチグラフはJPAにそれを賢明に伝えることができますが、ここでは機能しませんでした。私はそれを適切に行うためにどのようにセットアップできますか?

private A findWhereMyBsPropGreaterThan(Integer prop)のような名前を付ける方法がありますか?@EntityGraphアノテーションを付けてください。

答えて

0

[OK]を、ここにある:

@NamedEntityGraph(name="full", attributeNodes={@NamedAttributeNode("myBs")}) 
class A{ 
} 

@EntityGraph("full) 
@Query("SELECT a" 
     + "FROM A a JOIN a.myBs b ON b.property > :prop" 
     + "WHERE a.id= :id ") 
public A getByIdPastB(@Param("id") long id, @Param("prop") Integer prop);