给定这些域类:
class Person {
Long id
String name
static hasMany = [aliases: PersonAlias]
}
class PersonAlias {
Person person
Long id
String name
}
我尝试通过 JSON 土地进行直接的往返加载/保存:
Person p = Person.get(20005353);
def json = p as JSON
def str = json as String
def map = JSON.parse(str)
p.properties = map
p.save(flush:true)
产生这个 JSON
{
"id": 20005353,
"name": "John Smith",
"class": "Person",
"aliases":
[
{
"class": "PersonAlias",
"id": 99,
"name": "J. Smith"
}
]
}
并因此错误而失败:
grails.validation.ValidationErrors:1 个错误字段“别名”上的对象“heavymeta.Person”中的字段错误:拒绝值 [[]];代码 [typeMismatch.heavymeta.Person.aliases,typeMismatch.aliases,typeMismatch.java.util.Set,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [heavymeta.Person.aliases,aliases]; 论据 []; 默认消息[别名]];默认消息 [无法将类型“org.codehaus.groovy.grails.web.json.JSONArray”的属性值转换为属性“别名”所需的类型“java.util.Set”;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.util.LinkedHashMap] 的值转换为属性“别名 [0]”所需的类型 [heavymeta.PersonAlias]:找不到匹配的编辑器或转换策略]
为什么这会失败,有没有办法让它工作?