所以我有一个对象Person可以说,它具有以下字段(为简单起见)
class Person{
String name
List<Address> addressList
}
class Address{
String streetNo
}
这通常是要走的路,但是现在我正在与grails一起工作,我认为应该是以下情况:
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()
})
解析工作正常,就像我在保存人对象之前对其进行检查时,可以看到地址已正确添加(起初未保存且没有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
对象。 address
中的每个person
: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]
}
更新
embedded
:class Person{
String name
List<Address> addresses
static embedded = [ 'addresses' ]
}
class Address{
String streetNo
}
关于java - Grails在合成方面如何使用GORM(对HasMany或不对),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61845236/