这个问题分为两部分,第一部分是关于清除列表,第二部分是关于为对象分配所有者。
我在 Grails 模型中的两个域对象之间存在一对多关系。关系是这样的……
class Person {
static hasMany = [authorities: Role, locations: Location]
}
class Location {
static belongsTo = Person
}
在我的应用程序中
locations
列表于 Person
完全刷新并替换为用户操作的新列表。更重要的是我得到了 Location
的列表独立于相关联的对象 Person
.我通过检索当前登录的用户(我称之为 activePerson
)来确定将它们应用到哪个人。对我的目的来说很好。我想要做的是删除
activePerson
上的所有现有位置并插入所有新的,将它们与 activePerson
相关联我走的时候。我在 Person
上有一堆属性我不想在这一点上坚持下去,所以我想避免仅仅因为 child 的位置发生了变化而保存整个父对象。我想到了遍历
activePerson.locations
将它们一一列出并删除,并依靠 GORM/Hibernate 将查询批处理在一起并在最后刷新。这看起来像是蛮力,尽管它可能会奏效。我原以为会有 clearLocations
方法或类似的东西,但我找不到。如果我只是更换
activePerson.locations
使用新列表并调用 activePerson.save(flush:true)
, GORM 会处理现有行的删除吗?其次我想放新的
Location
对象到 activePerson
.我再次可以填充 activePerson.locations
并保存整个事情,但如果可以的话,我想避免这种情况。我可以单独保存它们,但是如何设置 belongsTo
在每个 Location
反对我走?所以回顾一下:
谢谢
最佳答案
对于#1,您可以清除集合(默认情况下它是一个集合):
activePerson.locations.clear()
#2 使用 addToLocations:
activePerson.addToLocations(location)
当你保存这个人时,位置<->人的关系将被更新。
关于grails - 如何清除和替换 Grails/Groovy 中一对多关系中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072705/