2016-05-06 7 views
1

Ich habe zwei Entitäten zu speichern:beste Weg Kind Ressource Spring Data REST

@Entity 
public class Father{ 
    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 
    @OneToMany(mappedBy = "father",cascade = CascadeType.ALL, fetch =  FetchType.LAZY) 
    private Set<Child> children; 
    // other 
} 

und

@Entity 
public class Child{ 
    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 
    @ManyToOne(fetch = FetchType.EAGER) 
    private Father father; 
    // other 
} 

Durch die Verwendung von Spring Data REST i Einheit speichern:

Vater Erstellen von POST

{ 
"name":"Father1" 
} 

Und dann erstellen Kind durch POST http://localhost:8080/children/

{ 
"name":"Child1", 
"father":"http://localhost:8080/fathers/1" 
} 

oder ich kann zwei unabhängige Einheiten speichern und bindet die Ressource durch die gegebene URI hingewiesen (s) auf die Ressource.

Welcher Weg ist der beste Weg? Und ich kann das nicht verstehen: kann ich Kind zu Vater hinzufügen:

curl -X PUT -H "ContentType: text/uri-list" http://localhost:8080/children/1 http://localhost:8080/fathers/1/children 
+0

Da die Beziehung im untergeordneten Element zugeordnet ist, gehe ich davon aus, dass Sie sie nur dort festlegen können, indem Sie die vater-Eigenschaft festlegen. Vielleicht wäre dies bei einer ManyToMany anders, da Sie dann die Entity zuerst erstellen und dann verknüpfen könnten, ohne sie dabei zu ändern. Aber ehrlich, das ist nur raten, muss damit auch spielen, also: Gute Frage. –

+0

_ "Welcher Weg ist der Beste?" _ Mit welchem ​​Maß? 'PUT' ersetzt eine Ressource, so dass zum Hinzufügen von Kindern die Liste nicht nur die neuen, sondern auch die vorhandenen Kinder enthalten muss. – zeroflagL

Antwort

0

Zuerst Sie Vater Entität erstellt und gespeichert es.

Dazu neues Kind, um Ihr Kind binden wollen, müssen Sie die folgenden in Ihrem Kind Anfrage

{ 
    "father.id": 1, 
    "name":"SomeName" 
} 

Frühling erstellen wird automatisch Vater Einheit umwandeln, wenn Anforderung empfangen wird.