2017-07-04 9 views
0

私はページングが必要なクエリを念頭に置いており、Spring JPAで構築したいと考えています。私は3つのテーブル、詳細、ヘッダー、およびクレームを持っています。ヘッダーレコードには、多くの(子)詳細レコードがあり、OneToManyマッピングがあります。請求はヘッダーとの関係はありませんが、正式な制約はありませんが、どちらも同じ値のこのフィールドclaim_num(主キーではありません)を持っています。クレームには、 'lastName'というフィールドもあります。 SpringのJPARespositoryを拡張し、詳細レポでは、私は次のように@queryと方法を構築していました:JPQLリポジトリから無関係のエンティティでプロパティをソート

 @Query("select new MyDTO(d, h, c) from Detail d, Header h 
    left join Claim c on h.claimNum = c.claimNum") 
    Page<MyDTO> getSomeDetails(new Page(0, 10, new Sort("claim.lastName"))) 

目標は、ヘッダや請求から詳細と値のページを取得することであるとして、結果セットで返される必要がありますよく 注文番号は私の現在の障害です。私は「主張は細部の財産ではない」としている。それは理にかなっていますが、詳細は形式的にヘッダーに関連していますが、詳細レベルでPage(Sort())を渡すと、生成されたSQLは 'order by'を正しく取得できますか?読んでいただき、ありがとうございました。これはスプリングブートですが、ハイバネートコア5.1にアップグレードされました。

答えて

0

私が発見した上記のものには大きな問題がありました。特に行数の場合。私はこれを多く見直して、かなり醜いものを持ってしまった。私は無関係のエンティティに参加していて、私が何か働いていると思ったが、行数は完全に間違っていたので、元々はhereの例に従っていた。私が使用していたテストデータベースは、最大150行のようでしたが、行数は47,000のようなものでしたので、結果セットは膨らんでいました。この質問は、誰にも価値があるかどうかわからないこの時点で

select new AdjusterSortDTO(detail, rfsth, rule, cm) 
From Detail detail 
left join Rule rule on rule.Detail.DetailId=detail.DetailId 
left join Header rfsth on rfsth.headerId=detail.header.headerId 
left join ClaimMaster cm 
on rfsth.claimNum = cm.claimNum order by cm.adjusterEmail 

:私はもっと参加し、ハードで順序を符号化してしまいました。

関連する問題