如何连接两个单元操作(+的removeAll创建)成一个(How to join two unit

2019-11-02 10:29发布

只有一个在同一时间的应用程序每个用户的角色。 要更新的作用,我们以前除去所有的当前角色:

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发生一些错误,并创建,它会正确地回滚?

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

Answer 1:

服务是做正确的地方,因为他们已经交易。 这意味着,如果出现错误的交易将rolledback。

A面值得注意的是,仅unchecked异常会回滚事务。



文章来源: How to join two unit operations (removeAll + create) into one