Java Grails如何在组合方面使用GORM(有很多还是没有)
比如说,我有一个objectperson,它有以下字段(为了简单起见) 我正在从HTTP调用接收数据,并尝试保存它:Java Grails如何在组合方面使用GORM(有很多还是没有),java,grails,groovy,gorm,Java,Grails,Groovy,Gorm,比如说,我有一个objectperson,它有以下字段(为了简单起见) 我正在从HTTP调用接收数据,并尝试保存它: def persons = response.getAt("response").getAt("persons").collect() persons.forEach({ current -> def person = new Person(current) person.save() }) 解析工作正常,因为当我在
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
参考:
地址的延迟加载:
class Person{
String name
List addresses
static hasMany = [addresses: Address]
static mapping = {
addresses lazy: false
}
}
因为您更希望地址
表现为嵌入的
对象
个人
中的每个地址
,来解析该地址:
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
}
班级人员{
字符串名
列出地址
静态嵌入=['地址']
}
班级地址{
字符串街号
}
静态映射{fetch:'join'}什么是Grails版本?
地址列表可以有多长?你用的是什么数据库?我用的是内存H2(默认情况下),我相信我有最新的Grails版本(4+)。假设每个人最多可以有5个地址,每个地址有3-4个属性。(我不介意没有一个实际的地址表,因为我尝试嵌入它,但也不起作用)我切换到mongo,因为我觉得它更容易处理,我尝试了第一个和第三个解决方案,但没有运气,我仍然得到了地址的Id,而不是对象本身,关于第2点,由于某种原因,它看不到地址的道具。我假设在第4个表中,我不需要在不同的表中有地址,对吗?是的。所有地址都作为Person
文档中的子文档数组。我在尝试使用mongo时遇到问题。4(只有当CurrentBSONType为DOCUMENT时才能调用readStartDocument,而不是当CurrentBSONType为INT64时)将尝试解决该问题并重试
@JsonAutoDetect(fieldVisibility = Visibility.PUBLIC_ONLY) // either for the class
class Person{
String name
@JsonProperty // or for each prop
List addresses
static hasMany = [addresses: Address]
}
class Person{
String name
List<Address> addresses
static embedded = [ 'addresses' ]
}
class Address{
String streetNo
}