0

同时在应用程序中每个用户只有一个角色。要更新角色,我们之前删除了所有当前角色:

Integer roleId = params.roleSelector.toInteger()
def roleInstance = Role.findById(roleId)
UserRol.removeAll userInstance
UserRol.create userInstance, roleInstance

它正在工作,但我认为执行 removeAll 并作为单一操作创建更正确,以便在发生任何错误时正确回滚。

可能吗?

更新 1

我在这里发现我们可以添加@Transactional 来使方法具有事务性。所以如果我们写:

@Transactional
private def unitaryOperationUpdate {

    Integer roleId = params.roleSelector.toInteger()
    def roleInstance = Role.findById(roleId)
    UserRol.removeAll userInstance
    UserRol.create userInstance, roleInstance
}

如果 removeAll 和 create 之间发生了一些错误,它会正确回滚吗?

顺便说一句,我想知道如何检查自己是否正常工作:我在单独的线程中问了这个问题:如何检查@transactional 方法是否在 Grails 中正确执行回滚?

4

1 回答 1

2

服务是这样做的正确场所,因为它们已经是事务性的。这意味着如果出现问题,事务将被回滚。

附带说明的是,只有未经检查的异常才会回滚您的事务。

于 2013-08-30T14:57:41.067 回答