Grails GORM问题:对象引用未保存的瞬态实例

时间:2009-11-26 12:28:47

标签: grails gorm

在尝试.save() Foo对象时,下面的Grails代码抛出以下异常:

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

我想我错过了与HTTP params自动填充域对象有关的一些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 ]
  }
}

1 个答案:

答案 0 :(得分:4)

如果'Bar'仅存在于Foo的上下文中,请将以下行添加到Bar.groovy

class Bar {
   static belongsTo = Foo

}

如果在其他情况下使用'Bar',您可以在Foo.groovy中使用

class Foo {
  Bar bar
  static mapping = {
    bar cascade:'all-delete-orphan'
  }


}