Problème GORM Grails: un objet fait référence à une instance transitoire non enregistrée

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

  •  05-07-2019
  •  | 
  •  

Question

Le code Grails ci-dessous lève l'exception suivante lors de la tentative de .save () de l'objet Foo:

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

Je suppose que certaines des sémantiques GORM ne sont pas renseignées en ce qui concerne le remplissage automatique des objets de domaine à partir des paramètres HTTP.

Ma question est simplement:

  • Quelle est la bonne façon de peupler et de sauvegarder l'objet Foo sans obtenir cette exception?

Modèle:

class Foo {
  Bar bar
}

Voir:

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

Contrôleur:

class FooController {
  def fooAction = {
    Foo foo = new Foo(params)
    foo.save()
    [ foo: foo ]
  }
}
Était-ce utile?

La solution

Si "Bar" n'existe que dans le contexte de Foo, ajoutez la ligne suivante à Bar.groovy

class Bar {
   static belongsTo = Foo

}

Si "Bar" est utilisé dans un autre contexte, vous pouvez utiliser dans Foo.groovy

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


}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top