Problème GORM Grails: un objet fait référence à une instance transitoire non enregistrée
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 ]
}
}
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