Grails 轻松保存或更新分层对象gorm

Grails 轻松保存或更新分层对象gorm,grails,gorm,Grails,Gorm,如何轻松处理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

如何轻松处理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()

我无法自动执行此操作,但必须手动遍历它吗?

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

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

我的第一次尝试(如果失败了)是尝试使用JSON转换器,如果仍然失败,我可能会为节点类型钩住JSON封送器。

确实解决了设置问题,是的,但它显然源于子映射。无法向映射中添加复杂类型,因此现在有:默认消息[未能将属性'subs'的类型'java.util.LinkedHashSet'的属性值转换为所需类型'java.util.Set';嵌套异常为java.lang.IllegalStateException:无法将类型[java.util.LinkedHashMap]的值转换为所需类型[Sub for property'subs[0]“:未找到匹配的编辑器或转换策略]数据绑定不接受嵌套对象。