2017-08-23 12 views
4

多くのエンティティが構成され、正常にマッピングされており、すべてが期待通りに機能します。where句を使用して複数のエンティティに参加し、その結果を取得

ここでは、複数のエンティティに参加するカスタムクエリを使用して、それらのwhere句をいくつか定義します。

public interface GiataItemRepository extends JpaRepository<GiataItem, String>{  
    @Query(value="select g from GiataItem g " 
      + "join g.service s " 
      + "join s.section se " 
      + "join se.secPic sp " 
      + "where g.giataId = :giataId " 
      + "and se.secScope = 'MAINGALLERY' " 
      + "and sp.category = 'MAINGALLERY' " 
      + "and sp.seqOrder = 0") 
    GiataItem findPicture(@Param("giataId") String giataId); 
} 

SQLでは、GiataItemの正しい結果が得られます。しかし、私は、servicesectionのような他のすべてのマッピングされたエンティティのための私のwhere節からの制限はありません。

giataIetem.getServiceを使用しているときに遅延読み込みを使用していますが、JPAは新しい選択を行い、where句はなくなりました。

どのようにして、私が参加したすべてのエンティティがwhere句とその制限に基づいて構築されるのですか?

答えて

2

あなたはJOIN FETCHを使用していることを達成することができます:

@Query(value="SELECT g FROM GiataItem g " 
     + "JOIN FETCH g.service as s " 
     + "JOIN FETCH s.section as se " 
     + "JOIN FETCH se.secPic as sp " 
     + "WHERE g.giataId = :giataId " 
     + "AND se.secScope = 'MAINGALLERY' " 
     + "AND sp.category = 'MAINGALLERY' " 
     + "AND sp.seqOrder = 0") 

また、ヴラッド・ミホールセアからこの答えを見てみましょう:

How does the FetchMode work in Spring Data JPA

関連する問題