我的 Grails 应用程序没有使用 GORM,而是使用我自己的 SQL 和 DML 代码来读取和写入数据库(数据库是一个巨大的标准化遗留数据库,这是唯一可行的选择)。
所以,我使用Groovy Sql 类来完成这项工作。数据库调用在我的控制器中调用的服务中完成。
此外,我的数据源是通过 Tomcat 中的 DBCP 声明的 - 所以它没有在 Datasource.groovy 中声明。
我的问题是我需要编写一些事务代码,这意味着在一系列成功的 DML 调用之后打开事务并提交,或者在发生错误时回滚整个事情。
我认为分别使用groovy.sql.Sql#commit()和groovy.sql.Sql#rollback()就足够了。
但是在这些方法 Javadocs 中,Groovy Sql 文档清楚地说明了
如果此 SQL 对象是从 DataSource 创建的,则此方法不执行任何操作。
所以,我想知道:在我的上下文中执行事务的建议方法是什么?即使在数据源声明中禁用自动提交似乎也无关紧要,因为这两种方法“......什么都不做”