/ / Das Speichern einer verschachtelten Liste von Objekten schlägt mit dem JSON-Beitrag in Grails fehl - json, list, rest, grails, post

Das Speichern verschachtelter Objektlisten schlägt mit JSON-Post in Grails fehl - json, list, rest, grails, post

Beispielanwendung: https://github.com/Hi-Fi/writetable-example-with-grails

In einer Beispielanwendung funktionieren Controller gut, wenn sie über GSP-Seiten verwendet werden oder das Formular mit CURL gebucht wird. Befehl mit curl:

curl "http://localhost:8080/junk/team/save" --data "name=team&players"%"5B0"%"5D.firstName=first&players"%"5B0"%"5D.lastName=last&players"%"5B0"%"5D.position=position&create=Create" --compressed.

Problem ist bei identischer Anforderung mit JSON, die identische Objekte (entsprechend dump ()) erstellt, die verschachtelten Werte jedoch nicht speichern kann.

Wenn Sie folgenden POST mit SOAPUI (localhost: 8080 / junk / api / rest) durchführen:

{
name: "Team name",
players: [
{
firstName: "Player first name",
lastName: "Player last name",
position: "Player position"
}
]
}

Ich bekomme nur einen Fehler:

| Error 2014-12-20 21:02:47,050 [http-bio-8080-exec-1] ERROR hibernate.AssertionFailure  - an     assertion failure occured
(this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
Message: null id in junk.Player entry (don"t flush the Session after an exception occurs)
Line | Method
->> 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    744 | run . . . in java.lang.Thread

Das übergeordnete Objekt (Team) wird auch dann gespeichert, wenn der Fehler aufgetreten ist. Mit Hibernate4 schlägt die gesamte Sicherung fehl, sodass das Aktualisieren darauf nicht half.

Antworten:

0 für die Antwort № 1

Eine Möglichkeit, dies zu lösen, besteht darin, explizit "Team" mit jedem "Player" zu verbinden

team.players.each {it.team = team}

Bei der Formularbuchung erfolgt dieser Schritt automatisch, jedoch aus irgendeinem Grund nicht mit JSON. Spielerobjekt um nach Teamobjekterstellung in JSON:

<junk.Player@76f8539e firstName=first lastName=last position=position deleted=false errors=grails.validation.ValidationErrors: 0 errors $changedProperties=null id=null version=null team=null>

Und mit dem Formular POST:

<junk.Player@1ba14c1b firstName=first lastName=last position=position deleted=false errors=grails.validation.ValidationErrors: 0 errors $changedProperties=null id=null version=null team=junk.Team : (unsaved)>

Dies ist möglicherweise nicht die "richtige" Lösung, daher freue ich mich immer noch zu hören, ob es bessere Lösungen für verschachtelte Eins-zu-Viele-Listen gibt.