Problema GORM de Grails: el objeto hace referencia a una instancia transitoria no guardada

StackOverflow https://stackoverflow.com/questions/1803415

  •  05-07-2019
  •  | 
  •  

Pregunta

El siguiente código de Grails lanza la siguiente excepción al intentar .save () el objeto Foo:

org.hibernate.TransientObjectException/
org.springframework.dao.InvalidDataAccessApiUsageException: 
object references an unsaved transient instance - 
save the transient instance before flushing: Bar

Supongo que me estoy perdiendo algo de la semántica de GORM en relación con la población automática de objetos de dominio desde parámetros HTTP.

Mi pregunta es simplemente:

  • ¿Cuál es la forma correcta de rellenar y guardar el objeto Foo, sin obtener dicha excepción?

Modelo:

class Foo {
  Bar bar
}

Ver:

<g:form id="${foo.id}">
  <g:select name="foo.bar.id" from="${Bar.list()}" />
</g:form>

Controlador:

class FooController {
  def fooAction = {
    Foo foo = new Foo(params)
    foo.save()
    [ foo: foo ]
  }
}
¿Fue útil?

Solución

Si 'Bar' solo existe en el contexto de Foo, agregue la siguiente línea a Bar.groovy

class Bar {
   static belongsTo = Foo

}

Si 'Bar' se usa en otro contexto, puede usarlo en Foo.groovy

class Foo {
  Bar bar
  static mapping = {
    bar cascade:'all-delete-orphan'
  }


}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top