应该这样做:
List<Book> books = createSomeBooks()
books.each { book ->
Book.withNewTransaction {TransactionStatus status ->
try {
book.save(failOnError: true)
} catch (ex) {
status.setRollbackOnly()
}
}
}
如果您回滚,该会话无效,它将被清除。因此,任何访问从数据库读取的实体的尝试都将失败,但是写尚未持久的实体就可以了。但是,您确实需要使用单独的事务来防止一个故障回滚所有事件,因此要避免withNewTransaction。