Heim >Java >javaLernprogramm >Wie gebe ich ein benutzerdefiniertes Objekt aus einer Spring Data JPA GROUP BY-Abfrage zurück?

Wie gebe ich ein benutzerdefiniertes Objekt aus einer Spring Data JPA GROUP BY-Abfrage zurück?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 08:51:30690Durchsuche

How to Return a Custom Object from a Spring Data JPA GROUP BY Query?

So geben Sie ein benutzerdefiniertes Objekt aus einer Spring Data JPA GROUP BY-Abfrage zurück

Bei der Durchführung komplexer Abfragen mit Spring Data JPA ist es notwendig, benutzerdefinierte Objekte zurückzugeben, anstatt die Standardentitäten. Ein solches Szenario besteht darin, die Ergebnisse nach einem bestimmten Feld zu gruppieren und die Anzahl für jede Gruppe abzurufen. In diesem Artikel werden zwei Methoden untersucht, um dies zu erreichen: eine für JPQL-Abfragen und eine für native Abfragen.

Lösung für JPQL-Abfragen

JPQL bietet native Unterstützung für die Rückgabe benutzerdefinierter Objekte mit dem neuen Schlüsselwort. So geht's:

  1. Definieren Sie eine einfache Bean-Klasse, um die gewünschte Datenstruktur darzustellen.
  2. Geben Sie Instanzen dieser Bean-Klasse aus der Repository-Methode zurück.
<code class="java">public interface SurveyRepository extends CrudRepository<Survey, Long> {
    @Query("SELECT new com.path.to.SurveyAnswerStatistics(v.answer, COUNT(v)) FROM Survey v GROUP BY v.answer")
    List<SurveyAnswerStatistics> findSurveyCount();
}

public class SurveyAnswerStatistics {
    private String answer;
    private Long cnt;
    // getters and setters here
}</code>

Lösung für native Abfragen

Native Abfragen unterstützen das neue Schlüsselwort nicht. Verwenden Sie stattdessen Spring Data-Projektionsschnittstellen:

  1. Definieren Sie eine Projektionsschnittstelle mit den gewünschten Eigenschaften.
  2. Projizierte Eigenschaften aus der Abfrage zurückgeben.
<code class="java">public interface SurveyAnswerStatistics {
    String getAnswer();
    int getCnt();
}

public interface SurveyRepository extends CrudRepository<Survey, Long> {
    @Query(nativeQuery = true, value = "SELECT v.answer AS answer, COUNT(v) AS cnt FROM Survey v GROUP BY v.answer")
    List<SurveyAnswerStatistics> findSurveyCount();
}</code>

Wichtige Hinweise:

  • Stellen Sie sicher, dass der Weg und die Nutzung voll qualifiziert sind des neuen Schlüsselworts für JPQL-Abfragen.
  • Verwenden Sie das AS-Schlüsselwort von SQL, um Ergebnisfelder mit Projektionsschnittstellen in nativen Abfragen zuzuordnen.

Das obige ist der detaillierte Inhalt vonWie gebe ich ein benutzerdefiniertes Objekt aus einer Spring Data JPA GROUP BY-Abfrage zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn