gpt4 book ai didi

hibernate - 何时在 grails 中使用executeUpdate

转载 作者:行者123 更新时间:2023-12-03 05:00:20 25 4
gpt4 key购买 nike

我正在查看当前项目中的一些 grails gorm 代码,我想知道以下 HQL 方法的优点和缺点是什么:

UploadUpsell.executeUpdate("update UploadUpsell set processedStatus=:newStatus, processedDate=:processedDate where processedDate is null and period=:period",
[newStatus: EXPIRED_UPSELL_STATUS, processedDate: new Date(), period: flow.period])

我会采用更惯用的方法

UploadUpsell.findAllByPeriodAndProcessedDate(flow.period, null).each { UploadUpsell uploadUpsell ->
uploadUpsell.with {
processedStatus = EXPIRED_UPSELL_STATUS
processedDate = new Date()
save()
}
}

我相信我的方法会更容易测试并且更具可读性,但我想知道我的想法是否只是教条

据我所知,grails 模拟框架不支持 HQL 语句。

最佳答案

您的方法更具可读性,但性能较差。您将所有实例读入内存,包括您不会更改的数据,进行更改,然后将所有内容推回数据库,包括未更改的值。如果您的域类及其值很小,这并不是什么大问题(特别是在记录数量不太大的情况下),但一般来说,这种方法存在可扩展性问题。

通过使用executeUpdate直接运行查询,您可以让数据库做它擅长的事情 - 它可以找到需要更新的记录并完成工作,而无需数据库和Web服务器之间的所有不必要的流量。

你说得对,单元测试不支持 HQL,但你不应该对域类进行单元测试。如果您不测试数据库的持久性,那么您所测试的只是模拟框架。

关于hibernate - 何时在 grails 中使用executeUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527247/

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