Grails Gorm Problem: Objeto faz referência a uma instância transitória não salva
Pergunta
O código do Grails abaixo joga a seguinte exceção ao tentar .save()
o objeto Foo:
org.hibernate.TransientObjectException/
org.springframework.dao.InvalidDataAccessApiUsageException:
object references an unsaved transient instance -
save the transient instance before flushing: Bar
Acho que estou perdendo algumas das semânticas do Gorm em conexão com os objetos de domínio automaticamente preenchidos dos parâmetros HTTP.
Minha pergunta é simplesmente:
- Qual é a maneira correta de preencher e salvar o objeto Foo, sem ser dito exceção?
Modelo:
class Foo {
Bar bar
}
Visão:
<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 ]
}
}
Solução
Se 'bar' só existir no contexto do Foo, adicione a seguinte linha ao bar.groovy
class Bar {
static belongsTo = Foo
}
Se 'bar' for usado em outro contexto, você pode usar em foo.groovy
class Foo {
Bar bar
static mapping = {
bar cascade:'all-delete-orphan'
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow