【问题标题】:Grails: Data binding custom hibernate types with multiple columnsGrails:具有多列的数据绑定自定义休眠类型
【发布时间】:2014-04-11 03:01:02
【问题描述】:

我在 Grails (http://grails.org/doc/2.3.x/guide/GORM.html#customHibernateTypes) 中使用自定义休眠类型,并将该类型映射到多个列。但是,我有点难以弄清楚如何对这些自定义类型进行数据绑定。我可以使用@BindUsing 注释,但是,我只有一个属性和多个列。

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

class CustomData
{
  String field1
  String field2
}

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

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
}

我的问题是,在 BindUsing 闭包内,源包含一个值,一个名为 customData 的属性。但是,我需要两个值来重新创建自定义对象。这个问题一般是怎么解决的?

【问题讨论】:

    标签: hibernate grails data-binding groovy custom-type


    【解决方案1】:

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

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

    {
      field1: 'test',
      field2: '1'
    }
    

    DomainModel中使用以下@BindUsing

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2012-12-24
      相关资源
      最近更新 更多