首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >withTransaction不能正确地回滚

withTransaction不能正确地回滚
EN

Stack Overflow用户
提问于 2011-02-24 18:43:18
回答 1查看 694关注 0票数 0

在“我的个人控制器删除操作”中,我希望如果发生了DataIntegrityViolationException,那么关联的权限记录将被恢复,但它们不是。无论如何,我都不需要做显式回滚,但是不管有没有,回滚都不会发生。withTransaction回滚似乎不起作用。还是我做错什么了?我使用的是Grails 1.3.7和MySQL (innodb)。

代码语言:javascript
复制
        Person.withTransaction { status ->
            Authority.findAll().each { it.removeFromPeople(person) }
            try {
                person.delete()
                flash.message = "person.deleted"
                flash.args = [params.id]
                flash.defaultMessage = "User ${params.id} deleted"
                redirect(action: "list")
            }
            catch (org.springframework.dao.DataIntegrityViolationException e) {
                status.setRollbackOnly()
                flash.message = "person.not.deleted"
                flash.args = [params.id]
                flash.defaultMessage = "User ${params.id} could not be deleted"
                redirect(action: "show", id: params.id)
            }
        }

更新

我意识到我的一些桌子不是无害的。我纠正了这一点,起初看来问题已经解决了。我可以尝试删除用户记录,获取错误,然后以该用户身份登录。在此之前,此错误导致登录失败,这意味着当局的记录没有回滚。

代码语言:javascript
复制
ERROR springsecurity.GrailsDaoImpl  - User [admin9] has no GrantedAuthority

所以一切看起来都很好。然后我重新启动我的应用程序,尝试登录并再次获得错误。因此,即使回滚看起来很有效,但从未保存到数据库的记录也是有效的。

EN

回答 1

Stack Overflow用户

发布于 2011-02-25 09:37:18

会不会是您从另一个事务中执行此代码?也许,从服务方法来看,这在默认情况下是事务性的?

MySQL不支持嵌套事务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5109014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档