0
在我的Person控制器Delete操作中,我期望如果DataIntegrityViolationException發生,那麼關聯的Authority記錄將被恢復,但它們不是。無論如何,我甚至不需要做明確的回滾,但是不管有沒有,回滾都不會發生。看來withTransaction回滾不起作用。或者我做錯了什麼?我使用Grails 1.3.7和MySQL(innodb)。withTransaction不能正確回滾
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)
}
}
UPDATE
我意識到,我的一些表格,其中不會InnoDB的。我糾正了這個問題,起初看起來問題解決了。我可以嘗試刪除用戶記錄,獲取錯誤,然後以該用戶身份登錄。之前,登錄失敗並出現此錯誤,這意味着權限記錄尚未回滾。
ERROR springsecurity.GrailsDaoImpl - User [admin9] has no GrantedAuthority
所以一切看起來不錯。然後我重新啓動我的應用程序,嘗試登錄並再次出現錯誤。所以即使回滾看起來有效,那些永遠不會保留到數據庫的記錄。
事實證明,並不是我所有的表中innodb。管理局最終成爲ISAM。不知道這是怎麼發生的。 – 2011-02-24 19:44:29