GRAILS GORM -Problem: Objekt verweist auf eine nicht gerettete transiente Instanz
Frage
Der nachstehende Gralscode läuft die folgende Ausnahme aus, wenn Sie versuchen .save()
Das Foo -Objekt:
org.hibernate.TransientObjectException/
org.springframework.dao.InvalidDataAccessApiUsageException:
object references an unsaved transient instance -
save the transient instance before flushing: Bar
Ich glaube, ich verpasse einige der GORM -Semantik im Zusammenhang mit automatisch besiedelten Domänenobjekten aus HTTP -Params.
Meine Frage ist einfach:
- Was ist der richtige Weg, um das FOO -Objekt zu bevölkern und zu retten, ohne die Ausnahme zu erhalten?
Modell:
class Foo {
Bar bar
}
Aussicht:
<g:form id="${foo.id}">
<g:select name="foo.bar.id" from="${Bar.list()}" />
</g:form>
Regler:
class FooController {
def fooAction = {
Foo foo = new Foo(params)
foo.save()
[ foo: foo ]
}
}
Lösung
Wenn 'Bar' nur im Kontext von Foo existiert, fügen Sie die folgende Zeile zu Bar.Groovy hinzu
class Bar {
static belongsTo = Foo
}
Wenn in einem anderen Kontext 'Bar' verwendet wird, können Sie in Foo.groovy verwenden
class Foo {
Bar bar
static mapping = {
bar cascade:'all-delete-orphan'
}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow