Программная обработка 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
потому что если не удается сохранить одну книгу и откат транзакции, сеанс будет недействительным, что не позволит сохранить последующие книги. Однако у этого подхода есть пара проблем:
Есть ли способ лучше? Одна возможность, которая пришла мне в голову, - это внедрение зависимостей в Hibernate.SessionFactory
и сделать это вместо
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....?
}
}