Spring Data REST (und insbesondere Spring HATEOAS) entkoppelt RESTful-IDs (z. B. URIs) von Entitäts-IDs, und ich habe Schwierigkeiten, sie beim Speichern neuer Objekte zu verknüpfen. Siehe die interessante Diskussion um diese Entkoppelung in Ссылка .
Angenommen, eine Clientanwendung möchte eine neue Ticket
-Ressource mit einer verknüpften TicketCategory
-Ressource erstellen. Ich möchte die Ticket
für einen entfernten Spring Data REST Endpunkt veröffentlichen. Das Ticket
hat noch keine ID, da es neu ist. Das TicketCategory
hat eine ID, aber auf dem Client ist es ein URI für die obige Diskussion. Wenn ich also die Ticket
speichere, übergibt Spring Data REST die Ticket
an Spring Data JPA, die es nicht mag: Spring Data JPA denkt, dass TicketCategory
- ohne Entity ID - transient ist:
UPDATE: Die Dokumentation unter
hat einen Abschnitt namens "Beziehungen aktualisieren", der ein Schema beschreibt, das HTTP-POST verwendet, um Beziehungen zwischen Entitäten herzustellen. Ich weiß nicht, ob das der einzige derzeit verfügbare Ansatz ist, aber es scheint, dass dieser Ansatz es erforderlich machen würde, die Assoziation auf dem ursprünglichen Post null zu lassen und ihn dann mit einem nachfolgenden Post zu aktualisieren. Im obigen Fall wäre das unerwünscht, da das Kategoriefeld ( @NotNull
) für Tickets erforderlich ist.
Haben Sie sich Ссылка angesehen ?
Einfach ausgedrückt: Der Exporteur wird Link-Objekte ablehnen, wenn er sie an Stelle einer Beziehung oder eines verwalteten Objekts (eine andere Entität mit einem exportierten Repository) findet.
Angenommen, Ihre verknüpfte Eigenschaft heißt "category", dann könnten Sie ein neues Ticket erstellen wie:
%Vor%Dies sollte in den neueren Versionen von Spring Data Rest geschehen:
%Vor%Geht es um Oliver Gierkes Kommentar unter Frühling Datenruhe 2.0.0.RELEASE bricht Code, der vorher mit RC1 arbeitete
Tags und Links spring-data-jpa spring rest spring-hateoas spring-data-rest