Grails 在组合方面如何使用 GORM(是否有 HasMany)
Grails How to work with GORM when it comes to composition (To HasMany or to not)
所以我有一个对象 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!
我还注意到,在多次检索 Person 列表后,地址列表变空了,我最终得到了地址:[]
我试图删除 hasMany 并返回到列表,但它也没有用,我浏览了官方文档,但没有什么比我已经尝试过的更能指出 and/or 提到的
有几种方法可以呈现您的 hasMany
参考:
关闭 addresses
的延迟加载:
class Person{
String name
List addresses
static hasMany = [addresses: Address]
static mapping = {
addresses lazy: false
}
}
因为您希望 addresses
表现得像 embedded
对象。
您可以通过显式调用它的道具来解析 person
中的每个 address
:
def list = Person.list()
list*.addresses*.streetNo
respond list
使用 Jackson 注释
@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'}
所以我有一个对象 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! 我还注意到,在多次检索 Person 列表后,地址列表变空了,我最终得到了地址:[]
我试图删除 hasMany 并返回到列表,但它也没有用,我浏览了官方文档,但没有什么比我已经尝试过的更能指出 and/or 提到的
有几种方法可以呈现您的 hasMany
参考:
关闭
addresses
的延迟加载:class Person{ String name List addresses static hasMany = [addresses: Address] static mapping = { addresses lazy: false } }
因为您希望
addresses
表现得像embedded
对象。您可以通过显式调用它的道具来解析
person
中的每个address
:def list = Person.list() list*.addresses*.streetNo respond list
使用 Jackson 注释
@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'}