2017-07-04 2 views
0

Ich habe eine Abfrage im Hinterkopf, die Paginierung erfordert und ich möchte es mit Spring JPA erstellen. Ich habe 3 Tabellen, Details, Header und Claim. Ein Kopfdatensatz kann viele (untergeordnete) Detaildatensätze enthalten und verfügt über eine OneToMany-Zuordnung. Ein Anspruch hat keine Beziehung zum Header, aber beide haben dieses Feld claim_num (nicht der Primärschlüssel), das den gleichen Wert hat, obwohl keine formalen Einschränkungen vorliegen. Claim hat auch ein Feld 'lastName', nach dem ich sortieren möchte. In einem Detail Repo Spring JPARespository erstreckt, hatte ich eine Methode mit @Query mit dem folgenden integrierten:JPQL Sortierung nach Eigenschaft auf nicht verwandtem Element aus Repo

 @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"))) 

Ziel bekommen Seiten von Details und Werten von Kopf- und Anspruch im Ergebnis muß zurückgeführt werden soll eingestellt als Gut. Die Reihenfolge von ist mein derzeitiges Hindernis. Ich bekomme "Anspruch ist keine Eigenschaft des Details". Das macht zwar Sinn, aber Details beziehen sich formal auf Header, aber um zu behaupten, nichts ist abgebildet. Wie kann das generierte SQL die richtige Reihenfolge erhalten, wenn die Seite (Sort()) auf der Detailebene übergeben wird? Danke fürs Lesen und jede Hilfe wird geschätzt. Dies ist ein Spring-Boot, aber Upgrade auf Hibernate-Core 5.1.

Antwort

0

Das oben erwähnte entdeckte hatte einige große Probleme. Besonders für die Anzahl der Zeilen. Ich überholte das sehr und habe etwas ziemlich Hässliches. Ich war ursprünglich einem Beispiel here gefolgt, als ich unzusammenhängenden Entitäten beitrat und dachte, dass ich etwas funktionierte, aber die Reihenzählungen waren völlig falsch. Die Testdatenbank, die ich benutzte, hatte nur eine maximale Anzahl von 150 Zeilen, aber die Anzahl der Zeilen war ungefähr 47.000, so dass die Ergebnismenge explodierte. Ich habe mehr verbindet und hart die Reihenfolge codiert durch und endete mit:

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 

An diesem Punkt nicht sicher, ob diese Frage sonst der Wert für jeden sein wird.

Verwandte Themen