gpt4 book ai didi

grails - 父级上的Grails级联删除是一对一删除子级记录

转载 作者:行者123 更新时间:2023-12-02 14:42:10 24 4
gpt4 key购买 nike

使用Grails 2.4.4,Hibernate 4.3.6.1插件...

我们使用hasMany / belongsTo拥有一个具有父/子一对多关系的域对象。删除父记录时,Grails将删除级联到子记录。但是,在查看SQL时,我看到Grails正在获取子记录,并使用delete ... where id = ? and version = ?逐一删除它们。

这是删除子记录的一种极其低效的方法,我很确定Grails最初编写此代码时没有这样做(我找不到任何导致此问题的东西)。

我希望Grails / Hibernate可以更像运行查询:
delete from Child where parent_id = ?
这样,所有子记录都将在一个查询中删除,而不是在数千个查询中删除。

映射/配置中是否有某些东西会导致Grails以这种方式运行?

最佳答案

在事务服务方法中显式删除子对象和父对象很容易。删除hasMany集合,并将belongsTo转换为常规属性,例如

class Author {
String name
}


class Book {
String title
Author author
}

然后您可以通过两个查询有效地删除书籍和作者:
void deleteAuthor(Author a) {
Book.where { author == a }.deleteAll()
a.delete()
}

观看 this presentation,它显示了您应避免使用集合的其他原因。

关于grails - 父级上的Grails级联删除是一对一删除子级记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com