Grails GORMの問題:オブジェクトが保存されていない一時インスタンスを参照しています

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

  •  05-07-2019
  •  | 
  •  

質問

以下の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'
  }


}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top