【问题标题】:Easy save or update of hierarchical object gorm易于保存或更新分层对象规范
【发布时间】:2013-05-07 12:49:09
【问题描述】:

如何轻松处理 GORM 中的嵌套属性?

如果我有包含嵌套属性的属性映射:

def mymap = [
   id : '1',
   name : 'first name',
   subs : [[
      subid : 1,
      name : 'first sub name'
   ],[
      subid : 2,
      name : 'second sub name'
   ]]
]

我有以下域对象:

class Node {
  int id
  String name
  static hasMany = [subs:Sub]
}
class Sub {
  int id
  String name
}

如果我用地图创建一个新节点

new Node(myMap).save()

它抱怨类似>>无法将类型“java.util.ArrayList”的属性值转换为属性“subs”所需的类型“java.util.Set”

当我尝试更新时也是如此

node.properties = myMap
node.save()

我没有办法自动执行此操作而必须手动遍历它吗?

【问题讨论】:

  • 数据绑定不采用嵌套对象。

标签: grails grails-orm


【解决方案1】:

您的地图内容看起来或多或少像一些 JSON。

我的第一次尝试(如果开箱即用失败)是尝试使用 JSON 转换器,如果仍然失败,我可能会将我的 JSON 编组器挂接到 Node 类型。

【讨论】:

    【解决方案2】:
    def mymap = [
       id : '1',
       name : 'first name',
       subs : [[
          subid : 1,
          name : 'first sub name'
       ],[
          subid : 2,
          name : 'second sub name'
       ]] as Set
    ]
    

    【讨论】:

    • 确实解决了集合问题,是的,但它显然起源于子地图。无法向地图添加复杂类型,因此现在有:默认消息 [无法将类型“java.util.LinkedHashSet”的属性值转换为属性“subs”所需的类型“java.util.Set”;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.util.LinkedHashMap] 的值转换为所需类型 [Sub for property 'subs[0]':找不到匹配的编辑器或转换策略]
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多