删除关联实体并将此更改保留到数据库时出错。
有一个groovy对象parent
,它有很多child
实体。当我们找到这个域对象并将列表设置为null,然后调用保存(flush:true)时,child
元素仍然保留在数据库中。我们希望这些元素已经被删除。任何建议都很好。
class Parent {
static hasMany = [child:Child]
...
}
和儿童:
class Child {
belongsTo = [Parent]
...
}
我们添加元素并删除:
def child = new Child()
def parent = new Parent(child:child)
parent.save(flush:true)
def id = parent.id //from saved entity
/// in separate transaction
parent = Parent.get(id) //id from above
parent.child = null
parent.save(flush:true)
// check database - child reference still there - expect to have been deleted
任何关于我们做错了什么的建议都将不胜感激。使用grails 1.3.5(最新版本)。
2条答案
按热度按时间ahy6op9u1#
这个很好用。
xxe27gdn2#
首先,你应该使用child.delete(flush:true)而不是assign null。这是不合适的。(为之前的错误道歉)
我推荐你阅读彼得莱德布鲁克系列:http://blog.springsource.com/2010/07/02/gorm-gotchas-part-2/。在您的情况下,请搜索“删除子项”
更新:如果你还没有读过上面的文章(特别有用):
要删除一个子集合,首先需要将它从父集合中移除,然后再删除它。但是由于使用了belongsTo关系,这会导致属性不为空异常。
解决方案:您可以将此添加到父类中:
上面的Map将帮助删除所有没有父节点的子节点。