2009-11-26 5 views
0

Le code ci-dessous Grails lève l'exception suivante lorsque vous essayez de .save() l'objet Foo:problème Grails GORM: Object référence une instance transitoire non enregistré

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

Je suppose que je suis absent sur une partie de la sémantique dans GORM connexion avec le remplissage automatique des objets de domaine à partir des paramètres HTTP.

Ma question est simplement:

  • Quelle est la bonne façon de remplir et enregistrer l'objet Foo, sans se faire ladite exception?

Modèle:

class Foo { 
    Bar bar 
} 

Vue:

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

Controller:

class FooController { 
    def fooAction = { 
    Foo foo = new Foo(params) 
    foo.save() 
    [ foo: foo ] 
    } 
} 

Répondre

4

Si 'Bar' 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' 
    } 


} 
Questions connexes