Grails Gorm Problem: Objeto faz referência a uma instância transitória não salva

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

  •  05-07-2019
  •  | 
  •  

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 ]
  }
}
Foi útil?

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
scroll top