Abrufen Daten als benutzerdefinierte Objekte aus Spring Data JPA GROUP BY-Abfragen verbessern die Datenpräsentation und vereinfachen die weitere Verarbeitung. Dieser Leitfaden untersucht, wie dies erreicht werden kann, und stellt Lösungen sowohl für JPQL- als auch für native Abfragen vor.
JPQL-Abfragen innerhalb der JPA-Spezifikation bieten native Unterstützung für die Rückgabe benutzerdefinierter Objekte.
Definieren Sie eine einfache Bean Klasse zur Darstellung der gewünschten Ausgabestruktur:
public class SurveyAnswerStatistics {
private String answer;
private Long cnt;
// Constructor
}
Aktualisieren Sie die Repository-Methode, um Instanzen der benutzerdefinierten Bean zurückzugeben:
public interface SurveyRepository extends CrudRepository {
@Query("SELECT new com.path.to.SurveyAnswerStatistics(v.answer, COUNT(v)) FROM Survey v GROUP BY v.answer")
List findSurveyCount();
}
Während native Abfragen keine direkte Unterstützung für das neue Schlüsselwort bieten, bieten Spring Data Projection-Schnittstellen eine alternative Lösung:
Erstellen Sie eine Projektionsschnittstelle mit den gewünschten Eigenschaften Ausgabe:
public interface SurveyAnswerStatistics {
String getAnswer();
int getCnt();
}
Aktualisieren Sie die Repository-Methode, um projizierte Eigenschaften zurückzugeben:
public interface SurveyRepository extends CrudRepository {
@Query(nativeQuery = true, value =
"SELECT v.answer AS answer, COUNT(v) AS cnt FROM Survey v GROUP BY v.answer")
List findSurveyCount();
}
Verwenden Sie das SQL-AS-Schlüsselwort, um Ergebnisfelder nahtlos Projektionseigenschaften zuzuordnen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3