这个问题分为两部分,第一部分是关于清除列表,第二部分是关于将所有者分配给对象。
我在 Grails 的模型中的两个域对象之间存在一对多的关系。关系看起来是这样的……
class Person {
static hasMany = [authorities: Role, locations: Location]
}
class Location {
static belongsTo = Person
}
在我的应用程序中,locations
列表Person
完全刷新并替换为用户操作的新列表。更重要的是,我得到了Location
独立于关联的对象列表Person
。我通过检索当前登录的用户来解决将它们应用到哪个人,我称之为activePerson
并且对我的目的来说很好。
我想要做的是删除所有现有位置activePerson
并插入所有新位置,将它们与activePerson
我去的时候相关联。我有一堆属性Person
,此时我不想在这些属性上保留,所以我想避免仅仅因为位置子对象发生变化而保存整个父对象。
我想过遍历activePerson.locations
列表并一个一个地删除它们,并依靠 GORM/Hibernate 将查询批处理在一起并在最后刷新。这似乎是蛮力,尽管它可能有效。我期待有一种clearLocations
方法或类似的方法,但我找不到。
如果我只是用activePerson.locations
新列表替换 并调用activePerson.save(flush:true)
,GORM 会处理现有行的删除吗?
其次,我想将新Location
对象放到activePerson
. 我可以再次填充activePerson.locations
并保存整个内容,但如果可以的话,我想避免这种情况。我可以单独保存它们,但是我如何belongsTo
在每个Location
对象上进行设置?
回顾一下:
- 如何在一对多集合的多端清除列表?
- 如何将独立对象与父对象关联并单独保存它们?
谢谢