如果我使用GORM在同一个线程上进行了两次刷新,那么第一次传递是否可能而第二次在单独的事务中失败?
或者即使我只是通过线程中途有一次冲洗,然后在请求完成后再进行第二次隐式刷新,第二次是否有可能失败但是显式刷新的更改通过并因此保持在DB?
由于
答案 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')
}
}
}