Grails:具有多列的数据绑定自定义hibernate类型

Har*_*cle 5 data-binding grails groovy hibernate custom-type

我正在使用Grails的自定义hibernate类型(http://grails.org/doc/2.3.x/guide/GORM.html#customHibernateTypes),我将类型映射到多个列.但是,我有点不知道如何对这些自定义类型进行数据绑定.我可以使用@BindUsing注释,但是,我只有一个属性和多个列.

例如,这是一个groovy类(它将具有使用正确定义的CustomDataUserType类创建的自定义类型):

class CustomData
{
  String field1
  String field2
}
Run Code Online (Sandbox Code Playgroud)

这是一个将此类作为属性的域模型

class DomainModel
{
  static mapping = {      
    customData type: CustomDataUserType, {
        column name: "field1"
        column name: "field2"
    }

  @BindUsing { obj, source ->
    // The source contains a field/property called customData (otherwise
    //   this BindUsing closure doesn't get called) however, I need two
    //   values
  }
  CustomData customData
}
Run Code Online (Sandbox Code Playgroud)

我的问题是在BindUsing闭包内部,源包含一个值,一个名为customData的属性.但是,我需要两个值来重新创建自定义对象.这个问题通常如何解决?

Jef*_*eck 1

BindUsing 闭包传递当前对象和一个映射,该映射是代码示例中的 Source。如果您在地图中传递了 field1 和 field2,您可以轻松地将它们放入您的 CustomData 类型中。

例如,将此 JSON 发布到期望的控制器DomainModel

{
  field1: 'test',
  field2: '1'
}
Run Code Online (Sandbox Code Playgroud)

使用以下 @BindUsing 中的DomainModel

 @BindUsing { obj, source ->
    CustomData customData = new CustomData(field1: source['field1'],field2: source['field2'])
    return customData
  }
  CustomData customData
Run Code Online (Sandbox Code Playgroud)

这应该通过数据绑定正确创建您的自定义对象。