gpt4 book ai didi

sql - Grails 事务(不是基于 GORM,而是使用 Groovy Sql)

转载 作者:行者123 更新时间:2023-12-02 03:43:07 26 4
gpt4 key购买 nike

我的 Grails 应用程序没有使用 GORM,而是使用我自己的 SQL 和 DML 代码来读取和写入数据库(该数据库是一个巨大的标准化遗留数据库,这是唯一可行的选择)。

所以,我使用 Groovy Sql Class做这项工作。数据库调用是在我的 Controller 中调用的服务中完成的。

此外,我的数据源是通过 Tomcat 中的 DBCP 声明的 - 因此它没有在 Datasource.groovy 中声明。

我的问题是我需要编写一些事务代码,这意味着在一系列成功的 DML 调用后打开一个事务并提交,或者在发生错误时回滚整个事务。

我认为使用 groovy.sql.Sql#commit() 就足够了和 groovy.sql.Sql#rollback()分别。

但是在这些方法Javadocs中,Groovy Sql文档明确指出了

If this SQL object was created from a DataSource then this method does nothing.

所以,我想知道:在我的上下文中执行事务的建议方法是什么?即使在数据源声明中禁用自动提交似乎也无关紧要,因为这两种方法“...不执行任何操作”

最佳答案

Groovy Sql 类具有 withTransaction

http://docs.groovy-lang.org/latest/html/api/groovy/sql/Sql.html#withTransaction(groovy.lang.Closure)

public void withTransaction(Closure closure)
throws java.sql.SQLException

使用缓存连接在事务中执行关闭。如果闭包采用单个参数,则将通过连接调用它,否则将不带参数调用它。

尝试一下。

关于sql - Grails 事务(不是基于 GORM,而是使用 Groovy Sql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851017/

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