Ich habe doppelte Ergebnisse für eine Sammlung mit diesem einfachen Modell: eine Entität Module
und eine Entität Page
. A Module
hat eine Gruppe von Seiten und eine Page
gehört zum Modul.
Dies wird mit Spring Boot mit Spring-Daten-JPA und Spring-Datenruhe .
Der vollständige Code ist auf GitHub
verfügbarHier ist der Code für die Entitäten. Die meisten Setter wurden aus Platzgründen entfernt:
Nun der Code für die Spring-Repositories, der ziemlich einfach ist:
Die Konfiguration kommt von 2 Dateien:
Abschließend das Datenbankschema und einige Testdaten:
Das ist es. Jetzt starte ich also von der Kommandozeile aus, um die Anwendung zu starten: mvn spring-boot:run
. Nach dem Start der Anwendung kann ich den Hauptendpunkt wie folgt abfragen:
Wie Sie sehen können, bekomme ich hier zweimal dieselbe Seite. Was ist los?
Ich habe den Code gereinigt, um diese Frage zu stellen, und um ihn kompakter zu gestalten, habe ich die JPA-Anmerkungen in der Entität Page
auf die Feldebene verschoben:
Der Rest der Klasse bleibt gleich. Dies ist im selben GitHub-Repo auf dem Zweig auf Feldebene zu sehen.
Wie sich herausstellt, wird beim Ausführen derselben Anfrage mit der Änderung an der API das erwartete Ergebnis (nach dem Start des Servers auf die gleiche Weise wie zuvor) ausgegeben:
Holen Sie sich alle Seiten für ein Modul %Vor% Antwort %Vor%Dies verursacht Ihr Problem (Page Entity):
%Vor%Hibernate verwendet Ihre Setter, um die Entität zu initialisieren, da Sie die JPA-Annotationen auf Getter setzen.
Initialisierungssequenz, die das Problem verursacht:
Sie können die JPA-Annotationen in die Felder einfügen und es wird funktionieren, weil die Setter während der Initialisierung nicht aufgerufen werden (Bonusfrage).
Tags und Links spring-data-jpa spring-boot spring-data-rest