tengo la siguiente excepción al guardar una instancia de viaje en Grails:Griales Gorm: Objeto referencia a una instancia transitoria no salvo
2011-01-26 22: 37: 42,801 [http-8090-5] ERROR errors.GrailsExceptionResolver - objeto hace referencia a una instancia transitoria no salva - guardar la instancia transitoria antes de lavar: Rower org.hibernate.TransientObjectException: hace referencia a un objeto no guardado transitoria ejemplo - guardar la instancia transitoria antes de lavar: Rower
El concepto es simple: para una excursión en barco necesita algunos remeros, un timonel (es también un remero) y un barco:
viaje se parece a (abreviado):
class Trip {
Boat boat;
Rower coxwain;
static belongsTo = [Rower,Boat]
static hasMany = [rowers:Rower]
}
y Remo (acortados)
class Rower {
String firstname;
String name;
Rower reference;
static hasMany = [trips:Trip];
static mappedBy = [trips:"rowers"]
}
el viaje, entonces se guarda en el controlador como:
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)) {
// ...
}
// ...
}
Creo que he corregido las relaciones entre los dominios. El Rower no se cambia mientras se agrega al viaje. ¿Por qué Grails quiere que se guarde? ¿Por qué es una instancia transitoria?
¿Ocurre en ambos bloques de regulación (es decir, el si y el otro)? –
¿Recibió algún mensaje de registro? –