Grails GORMの問題:オブジェクトが保存されていない一時インスタンスを参照しています
質問
以下のGrailsコードは、Fooオブジェクトを .save()
しようとすると、次の例外をスローします。
org.hibernate.TransientObjectException/
org.springframework.dao.InvalidDataAccessApiUsageException:
object references an unsaved transient instance -
save the transient instance before flushing: Bar
私は、HTTPパラメータからドメインオブジェクトを自動的に生成することに関連して、GORMセマンティクスのいくつかを見逃していると思います。
私の質問は単純です:
- 例外を言わずにFooオブジェクトにデータを入力して保存する正しい方法は何ですか?
モデル:
class Foo {
Bar bar
}
表示:
<g:form id="${foo.id}">
<g:select name="foo.bar.id" from="${Bar.list()}" />
</g:form>
コントローラー:
class FooController {
def fooAction = {
Foo foo = new Foo(params)
foo.save()
[ foo: foo ]
}
}
解決
「Bar」がFooのコンテキストにのみ存在する場合、次の行をBar.groovyに追加します
class Bar {
static belongsTo = Foo
}
「Bar」が他のコンテキストで使用されている場合、Foo.groovyで使用できます
class Foo {
Bar bar
static mapping = {
bar cascade:'all-delete-orphan'
}
}
所属していません StackOverflow