Problema GORM de Grails: el objeto hace referencia a una instancia transitoria no guardada
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 ]
}
}
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