12

Ich habe vor kurzem begonnen Frühjahr-data-Rest für meine Anwendung. Ich habe folgende JPA-Entitäten:POST verschachtelte Objekte mit Feder Daten Rest?

@Entity 
public class Super { 
    @Id 
    private long id; 

    @JoinTable 
    @OneToMany(cascade = CascadeType.ALL) 
    private List<Child> children; 
} 

----------------------------------------- 

@Entity 
public class Super2 { 
    @Id 
    private long id; 

    @JoinTable 
    @OneToMany(cascade = CascadeType.ALL) 
    private List<Child> children; 
} 

----------------------------------------- 

@Entity 
public class Child { 
    @Id 
    private long id; 

    @Column 
    private String childMetadata; 
} 

Ich kann neue Instanzen von Super oder Super2 von 2 Methoden denken Sparend:

  1. eine @RestResource für Child Klasse Expose -> Erstellen Sie alle Instanzen von Child vor Erstellen von Instanzen von Super oder Super2 -> Führen Sie die URLs aller Child Instanzen in Nutzlast von Super oder Super2.
  2. Pass die Details Child in der Nutzlast von Super oder Super2 ohne @RestResource für Child Klasse auszusetzen und die CascadeType.ALL wird Child Instanzen schaffen kümmern.

Es gibt einige Profis mit den beiden Methoden:

  1. Mit der Option 1, erhalte ich eine Fähigkeit, neue Child Objekte durch POST ing die URL der neuen Child zu http://<server>:<port>/super/1/children-Super oder Super2 nur hinzuzufügen. Aber ich verliere definitiv die kaskadierende Funktionalität der Datenbank, wenn ich diese Methode verwende.
  2. Mit der Option 2, erhalte ich die alle Kaskadierung Funktionalitäten Datenbank, aber ich verlieren die Flexibilität des Hinzufügens neuer Child Instanzen.

Gibt es etwas, das ich total verpasst haben? Ich möchte einen Weg, um die Kaskadierungsfunktionalität der Datenbank zu nutzen, ohne die Flexibilität zu verlieren, neue Kinder im laufenden Betrieb hinzuzufügen.

Danke für Hilfe. :)

+3

persönlich verwende ich nicht Frühjahr- Datenruhe. Nach meiner Erfahrung, es funktioniert ziemlich gut beim Lesen von Daten, solange Sie nur für jede Entität eine Ansicht (JSON-Darstellung) haben. Das Schreiben von Daten ist jedoch oft komplizierter, da Sie die Beziehung verwalten müssen, und dies erfordert oft benutzerdefinierten Code. Auch wenn Sie Elemente aus JSON Deserialisierung erstellen, haben Sie einiges über freistehende JPA-Entitäten wissen, was die meisten Entwickler nicht.Die meisten Entwickler wären besser dran, separate DTOs für JSON-Ansichten zu schreiben und Service-Methoden zu schreiben, um die Daten zu erhalten. –

Antwort

1

Es gibt eine dritte Lösung, die für Sie passen soll:

  1. Führen Sie die Details des Kindes in der Nutzlast von Super oder Super2 ohne Aussetzen @RestResource für das Attribut 'Kinder' von Super (und Super2).

Sie können immer noch /children verwenden, aber Sie können Kinder mit super abrufen und es veröffentlichen!

Um dies zu tun, nur Ihre ändern Super (und Super2) Klasse wie folgt:

public class Super { 
    @Id 
    @GeneratedValue 
    private Long id; 

    @JoinTable 
    @OneToMany(cascade = CascadeType.ALL) 
    @RestResource(exported=false) 
    private List<Child> children; 

    ... 
} 

Dann können Sie POST auf /supers:

{ 
    "children": [ 
     { 
      "childMetadata": "inner" 
     } 
    ] 
} 
Verwandte Themen