所以我有一个对象 人 比方说,有以下字段(为简单起见(
class Person{
String name
List<Address> addressList
}
class Address{
String streetNo
}
这将是通常要走的路,但现在我正在使用圣杯,我认为它应该是以下内容:
class Person{
String name
List addresses
static hasMany = [addresses: Address]
}
class Address{
String streetNo
static belongsTo = Person
}
我正在从HTTP调用接收数据,并试图保存它:
def persons = response.getAt("response").getAt("persons").collect()
persons.forEach({ current ->
def person = new Person(current)
person.save()
})
解析工作正常,因为当我在保存之前检查 person 对象时,我可以看到地址被正确添加(起初没有保存并且没有 ID,但在保存后,添加了 ID(
现在,当我想获取所有人时,我做一个基本的
respond Person.list()
我得到了所有正确的详细信息,但地址我只得到地址ID,例如:
{
id: 1,
name: foo,
addresses:[
{id:1},{id:2}
]
}
但我在这里想要的是实际的地址对象而不是它的 id! 我还注意到,在检索人员列表几次后,地址列表变空,我最终得到地址:[]
我试图删除 hasMany 并返回列表,但它也没有用,我浏览了官方文档,但没有什么比我已经尝试和/或提到的更多了
有几种方法可以呈现您的hasMany
引用:
-
关闭延迟加载以进行
addresses
:class Person{ String name List addresses static hasMany = [addresses: Address] static mapping = { addresses lazy: false } }
因为您希望
addresses
表现为embedded
对象。 -
您可以通过显式调用
person
中的每个address
props 来解析它:def list = Person.list() list*.addresses*.streetNo respond list
-
使用杰克逊注释
@JsonAutoDetect(fieldVisibility = Visibility.PUBLIC_ONLY) // either for the class class Person{ String name @JsonProperty // or for each prop List addresses static hasMany = [addresses: Address] }
更新
-
如果你使用mongo,你可以充分利用
embedded
:class Person{ String name List<Address> addresses static embedded = [ 'addresses' ] } class Address{ String streetNo }
亲自尝试添加
静态映射 { 获取: 'join' }