如何在Grails / Groovy中以一对多的关系清除和替换集合
这个问题分为两部分,第一部分是关于清除列表,第二部分是关于为所有者分配一个对象.
Grails中我的模型中的两个域对象之间存在一对多的关系.关系看起来像这样… class Person { static hasMany = [authorities: Role,locations: Location] } class Location { static belongsTo = Person } 在我的应用程序中,Person上的位置列表完全刷新,并替换为用户操作的新列表.更重要的是获取独立于关联Person的Location对象列表.我决定哪个人通过检索当前登录的用户来应用它,我称之为activePerson,对我而言是不错的. 我想做的是删除activePerson上的所有现有位置,并插入所有新的位置,并将其与activePerson关联.我有一堆Person,我不想坚持在这一点,所以我想避免保存整个父对象,只是因为位置的孩子已经改变. 我想到迭代activePerson.locations列表并逐个删除它们,并依靠GORM / Hibernate将查询批处理并最终进行刷新.这似乎是强力,虽然它可能工作.我期待着有一个clearLocations方法或类似的东西,但我找不到一个. 如果我只是用一个新的列表替换activePerson.locations并调用activePerson.save(flush:true),GORM会处理现有行的删除吗? 其次我想把新的Location对象放到activePerson上.再次,我可以填充activePerson.locations并保存整个事情,但是我想避免如果可以的话.我可以单独保存它们,但是如何在我去的每个Location对象上设置belongsTo? 所以要回顾一下: >如何在一对多集合的多端清除列表? 谢谢 解决方法
对于#1,您可以清除该集合(默认情况下为Set):
activePerson.locations.clear() 对于#2使用addToLocations: activePerson.addToLocations(location) 并且当您保存该人时,将更新位置< - >个人关系. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |