Grails Gorm : Objekt verweist auf eine nicht gespeicherte transiente Instanz

Bekomme ich folgende Exception beim speichern einer Instanz der Reise in Grails:

2011-01-26 22:37:42,801 [http-8090-5]
FEHLER Fehler.GrailsExceptionResolver
- Objekt verweist auf eine nicht gespeicherte transiente Instanz - speichern Sie die
transiente Instanz vor dem Spülen: Ruderer
org.hibernate.TransientObjectException:
Objekt verweist auf eine nicht gespeicherte transiente
Beispiel - speichern Sie die transiente Instanz
vor dem Spülen: Ruderer

Das Konzept ist einfach: Für einen boattrip müssen Sie einige Ruderer, ein coxwain (ist auch ein Ruderer) und ein Boot:

Reise aussieht (verkürzt):

class Trip {
    Boat boat;
    Rower coxwain;

    static belongsTo = [Rower,Boat]
    static hasMany = [rowers:Rower]
}

und Ruderer (gekürzt)

class Rower { 
    String firstname;
    String name;
    Rower reference;

    static hasMany = [trips:Trip];
    static mappedBy = [trips:"rowers"]
}

Die Reise ist dann im controller gespeichert, wie:

def save = {
        def trip = new Trip(params)

        //adding Rowers to Trip
        if (params.rower instanceof String) {
            def r = Rower.get(params?.rower)

            if (r != null) {
                trip.addToRowers(r)
            }
        } else {
            params?.rower?.each{
                rowerid ->
                def r = Rower.get(rowerid)
                log.info("rowerid (asList): " + rowerid)
                if (r != null) {
                    trip.addToRowers(r)
                }
            }
        } 

        //saving the new Trip -> EXCEPTION IN NEXT LINE
        if(!trip.hasErrors() && trip.save(flush:true)) {
          //...
        }
        //...
}

Ich denke, ich habe die Beziehungen zwischen den Domänen korrekt.
Der Ruderer wird nicht geändert, während es ist Hinzugefügt, um die Reise. Warum nicht Grails wollen, um Sie zu retten? warum ist es eine transiente Instanz?

Passiert das in beide controller blocks (d.h. der if-und der else -)?
Hast du irgendwelche logging-Nachricht?

InformationsquelleAutor Daniel | 2011-01-26

Schreibe einen Kommentar