2016-08-28 14 views
2

私は、スプリング・データJPAをスプリング・ブート・バージョン1.3.6.RELEASEとともにインメモリ・データベースとともに使用しています。スプリングデータJPA。子エンティティのページ設定

親エンティティから子エンティティをページ付けする方法が不思議です。 フェッチをに設定すると、LAZYは私にとって解決策ではありません。ここで

は、ユースケースである:

  1. は、子実体一方向の oneToMany関係を持っています。
  2. 1つのため児童数10万(LAZYが解決策ではありません)
  3. 私が(CPUおよびメモリのため)改ページを行うには、すべての子を取得したくない
  4. に到達することができますここで

は、コードサンプルです:

@Entity 
public class Parent{ 
    @Id 
    private Integer id; 

    @OneToMany 
    private List<Child> childs; 
} 

@Entity 
public class Child { 
    @Id 
    private Integer id; 
} 

public interface ParentRepository extends JpaRepository<Parent, Integer>{} 
public interface ChildRepository extends JpaRepository<Child, Integer>{} 

私は失敗した親リポジトリでこれを試してみた:

Page<Child> findById(int id, Pageable pageable); 

これは、子エンティティではなく親エンティティを返します。

どうすればいいですか?

+2

特定の親エンティティに関連付けられています。何か ''親を選択p.children child p =:parent'から子を選択してください。 –

+0

関係が単方向であっても動作しますか?私はそれを試してみましょう。 – nono

+0

同じ問題私は運がなければ解決しようとしています。あなたはそれを解決することができればあなたの質問に答えることができます。 [関連する質問](https://stackoverflow.com/questions/31582224/how-to-get-paginated-child-lists-from-onetomany-unidrectional-parent-using-findb) –

答えて

0

ここに、親を知っている子エンティティをフェッチできるコードのサンプルがあります。 このクエリはChildのページ番号付けされた結果を返します。

/** 
    * Find Child entities knowing the Parent. 
    */ 
    @Query("select child from Parent p inner join p.childs child where p = :parent") 
    public Page<Child> findBy(@Param("parent") Parent parent, Pageable pageable); 

そして、あなたはこのようにそれを使用することができます:あなたは子エンティティを探していることから、その方法はChildRepositoryにする必要があり、それがfindByParent名前を付ける必要があり、子供を返し、まあ

Page<Child> findBy = repo.findBy(parent, new PageRequest(page, size)); 
関連する問題