Программная обработка Grails

Когда мне нужно сохранить список объектов, и каждый объект должен быть сохранен в своей собственной транзакции (так что, если один из них потерпит неудачу, все не потерпят неудачу), я делаю это так:

List<Book> books = createSomeBooks()
books.each { book ->
  Book.withNewSession {
    Book.withTransaction {TransactionStatus status ->
      try {
        book.save(failOnError: true)
      } catch (ex) {
        status.setRollbackOnly()
      }
    }
  }
} 

я используюBook.withNewSession&nbsp;потому что если не удается сохранить одну книгу и откат транзакции, сеанс будет недействительным, что не позволит сохранить последующие книги. Однако у этого подхода есть пара проблем:

Это немного многословноНовый сеанс всегда будет создаваться для каждой книги, даже если предыдущая книга прошла успешно

Есть ли способ лучше? Одна возможность, которая пришла мне в голову, - это внедрение зависимостей в Hibernate.SessionFactory&nbsp;и сделать это вместо

List<Book> books = createSomeBooks()
books.each { book ->
  try {
    Book.withTransaction {
      book.save(failOnError: true)
    }
  } catch (ex) {
    // use the sessionFactory to create a new session, but how....?
  }
}