Frühling JPA REST Einer zu vielen

8

Ich wollte das Beispiel Zugriff auf JPA-Daten mit REST erweitern, indem ich eine Liste mit Adressen hinzufüge Person Einheit. Also habe ich eine Liste addresses mit @OneToMany Annotation hinzugefügt:

%Vor%

Die Klasse Address ist sehr einfach:

%Vor%

Und schließlich habe ich die AddressRepository Schnittstelle hinzugefügt:

%Vor%

Dann habe ich versucht, eine Person mit einigen Adressen zu POST:

%Vor%

Der Fehler, den ich bekomme, ist:

%Vor%

Welches ist die richtige Methode, um eine zu vielen und viele zu vielen Beziehungen zu erstellen und json-Objekte an sie zu senden?

    
Aris F. 04.01.2016, 01:11
quelle

3 Antworten

6

Sie sollten die zwei Adressen zuerst POSTIEREN und dann ihre zurückgegebenen URLs verwenden (zB Ссылка und Ссылка ) in Ihrer Person POST:

%Vor%

Wenn Sie zuerst die Person speichern und dann ihre Adressen hinzufügen möchten, können Sie dies tun:

%Vor%     
Francesco Pitzalis 04.01.2016, 08:51
quelle
0

Sollte Ihr Ruheservice keine Person anstelle einer Adresse akzeptieren?

%Vor%

Oder vielleicht versuchst du zwei verschiedene Rastleistungen zu machen, die ich nicht verstehe. Sie sollten nur einen Ruhe-Service haben, der eine Person mit Adresseinträgen aufnimmt.

    
Karl Nicholas 04.01.2016 02:05
quelle
0

Ich konnte dieses Problem beheben, indem ich das referenzierte Repository nicht exportiere. Dies fügt die Anmerkung oben auf der Oberfläche hinzu. In Ihrem Beispiel wäre das so:

%Vor%

Dies löst das Problem teilweise, da Spring Data die Fremdschlüssel für Sie nicht weitergibt. Es wird jedoch weiterhin Ihre Person und Adresse (ohne den Verweis auf die Person, die dazu gehört) beibehalten. Wenn wir dann einen weiteren Aufruf an die API machen würden, um diese fehlenden Fremdschlüssel zu aktualisieren, könnten Sie eine Person über die API mit all ihren verknüpften Adressen erreichen - wie @Francesco Pitzalis bereits erwähnt hat

Ich hoffe, es hilft. Nur eine letzte Notiz. Ich arbeite immer noch daran, weil ich es für lächerlich halte (ebenso wie grundlegend und notwendig), dass Hibernate die Fremdschlüssel nicht für uns verbreiten kann. Es sollte irgendwie möglich sein.

EDITED: In der Tat war es möglich. Die folgende Implementierung ist in der Lage, eine Entität und ihre untergeordneten Elemente für eine Architektur basierend auf Spring Data (Rest - wie wir die Repositories offen legen), Hibernate 5.0.12Final und MySQL mit der Speicher-Engine InnoDB (nicht im Speicher) für die Fremdschlüssel zu propagieren Datenbank).

%Vor%

Ссылка - Das war entscheidend.

%Vor%

Das ist extrem wichtig. Sie müssen wissen, wo Hibernate die SQL-Anweisungen ausführt, um den Dialekt richtig einzustellen. Für mich ist die Speicher-Engine meiner Tabellen InnoDB. Die nächste Verbindung half. Welchen mysql-Treiber verwende ich mit spring / hibernate? >

%Vor%

Das einzige, was ich nicht erklären konnte, ist, dass ich jetzt das "Kind" -Repository exportieren kann und es funktioniert immer noch gut. Irgendwelche Ideen, Leute?

    
SeRGiOJoKeR11 14.05.2017 21:02
quelle