在同一个线程GORM上刷两次

时间:2014-04-16 06:43:26

标签: grails gorm

如果我使用GORM在同一个线程上进行了两次刷新,那么第一次传递是否可能而第二次在单独的事务中失败?

或者即使我只是通过线程中途有一次冲洗,然后在请求完成后再进行第二次隐式刷新,第二次是否有可能失败但是显式刷新的更改通过并因此保持在DB?

由于

1 个答案:

答案 0 :(得分:1)

  

如果我使用GORM在同一个线程上进行了两次刷新,那么第一次传递是否可能而第二次在单独的事务中失败?

这是成功/失败的交易,而不是刷新。每个事务结束时都有一个隐式刷新,并且在每个会话结束时(请求)。绝对有可能在同一个线程中有几个事务,其中一些失败,其中一些成功。例如,给定一个简单的域类

class Book {
  String title
}

someAction中的第一个事务将成功,第二个事务将被回滚。

class MyController {

  def someAction() {

    Book.withTransaction {
      new Book().save(title: 'successful').save(failOnError: true)
    }

    Book.withTransaction {
      new Book().save(title: 'failed').save(failOnError: true)
      throw new RuntimeException('transaction rollback')
    }
  }
}