|
|
1
4
预期行为为:
基本上,这是预期的行为,现在是解释。 您的所有服务方法都是Transactional,因为您的服务名称上方有一个@Transactional。
默认情况下,每个Transactional方法都具有PROPAGATION。REQUIRED属性集。
这意味着当服务方法运行时,它将使用在作业中创建的当前事务。这里有一个棘手的部分,当一个功能具有多个事务性部分时,它会评估每个事务性部分的回滚条件,因此当您 方法() throws RuntimeException它将您的事务设置为仅回滚,但会一直持续到该事务结束(当Model.withTransaction..完成时),并在此时回滚所有事务。 更深入地说,您有三个部分可以将Transaction设置为rollbackOnly。
当事务结束时,事务将回滚,并且该时刻在 使用事务{..} 完成。 因此,您需要非常小心处理您的交易。 为了解决你的问题,你可以 方法() 仅通过设置 更新数据库() 作为服务类中的事务性,并从服务名称上方删除@transactional。
只将一个方法设置为@Transactional会使该方法成为Transactional,而不是所有方法都是事务性的。 我做了一个项目作为示例,这样你就可以运行测试并自己检查它,我还设置了log4j来显示事务的生命周期,这样你可以更好地理解它,你只需要运行MyProcessorIntegrationSpec.groovy https://github.com/juandiegoh/grails-transactions-rollback 希望它有帮助! |
|
|
user1452701 · 使用注入的服务序列化域实例? 8 年前 |
|
|
Anonymous1 · Grails 3.3.1-注册新约束 9 年前 |
|
|
Pablo Mosby · 逐子查找父一对多关系Grails 9 年前 |
|
Adeel Ansari · 任何想法,如何避免这里的if语句 9 年前 |
|
|
Bagbyte · Grails映射域类自定义列名 10 年前 |
|
|
Vladimir Korobkov · grails 3约束异常 11 年前 |
|
|
Ashish · 如何在grails的list()方法中设置where条件 11 年前 |