Exception 使用bindData的Grails TransientObject异常

Exception 使用bindData的Grails TransientObject异常,exception,grails,data-binding,Exception,Grails,Data Binding,有一种我无法理解的行为 我有两个域类,我用这个名称来说明问题,Foo和Bar是: [Foo] class Foo { String value1 } [Bar] class Bar { String value1 static belongsTo = [foo: Foo] } 现在我是我的控制器我有这个: def createBar = { def foo = foo.get(params['foo_id'].toLong()) //this is a hidden fi

有一种我无法理解的行为

我有两个域类,我用这个名称来说明问题,Foo和Bar是:

[Foo]
class Foo {
 String value1
}

[Bar]
class Bar {
  String value1

  static belongsTo = [foo: Foo] 
}
现在我是我的控制器我有这个:

def createBar = {
   def foo = foo.get(params['foo_id'].toLong()) //this is a hidden field in form
   def bar = new Bar()
   bindData(bar, params, [exclude:['foo']])
   bindData(bar, foo, [include:['foo']] //This not work!

   //bar.foo = foo //This works fine! 
   bar.save()
}
当我仅使用bindData保存时,控制器会抛出TransientObjectException,表示Foo未保存,但当我使用第二种形式时,操作工作正常,并保存域而不出现异常

为什么会发生这种情况?我不明白,因为对我来说,bindValue()和bar.foo是相同的行为

我没有在我的应用程序中使用dbCreate,仅验证,这是表的表示形式:

[Foo]
id (PK)
value1 (varchar)

[Bar]
id (PK)
value2 (varchar)
foo_id (FK)
我正在使用Grails2.2.3


谢谢。

您的代码有各种各样的问题

您正在将foo的实例传递给excludes,方法名称也是
bindData
而不是
bindValue

bindValue(bar, params, [exclude:[foo]])
这应该是

bindData(bar, params, [exclude:['foo']])

它看起来像是
foo.get
应该抛出一个NullPointerException,在哪里定义了
foo
呢?在我的表单中,我有一个隐藏的fiel,它包含defoo id。生成一个AJAX请求并调用该操作。但是get从DB返回一个有效的对象。对不起,格雷姆,我输入时出错了。我正在编辑这个问题。非常感谢。