2017-07-04 60 views
0

我有一個查詢記住,需要分頁,我想用Spring JPA構建它。我有3個表格,細節,標題和聲明。標題記錄可以包含許多(子)細節記錄並具有OneToMany映射。聲明與標題沒有關係,但都具有此字段的claim_num(不是主鍵),它是相同的值,儘管沒有正式的約束。聲明還有一個字段'姓氏'我想排序。在擴展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"))) 

的目標是從頭部和要求得到的信息和值的頁面需要在結果集要返回好。 順序是我目前的障礙。我得到'索賠不是細節的財產'。這是有道理的,但細節正式與頭部相關,但沒有聲明任何東西被映射。生成的SQL如何在詳細級傳入Page(Sort())時正確地得到'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 

此時不知道,如果這個問題將是有價值的其他任何人。