Я пытаюсь выполнить следующий сценарий:Grails ручных операций и откатить
class A {
...
static hasMany = [bees: B]
}
class B {
static belongsTo = [a: A]
}
Теперь мы создаем около 10 000 экземпляров B (из службы), который принадлежит к А в то время, но если 1 не удастся, он должен откатить все успешно созданные. Я попробовал несколько методов, никто не работал:
try {
for (int i = 0; i < batch.numToMake; i++) {
def b = new B().save(flush: i % 1000 == 0)
if (i == 50) {
throw new RuntimeException("simulate")
}
}
batch.status = Constants.BATCH_STATUS_DONE
batch.save(flush: true)
} catch (e) {
// This was a last resort test and still did not work
batch.status = Constants.BATCH_STATUS_FAILED
batch.vouchers.each {
batch.removeFromVouchers(it)
}
batch.save(flush: true)
}
// This did not work at all
B.withTransaction { status ->
try {
for (int i = 0; i < batch.numToMake; i++) {
def b = new B().save(flush: i % 1000 == 0)
if (i == 50) {
throw new RuntimeException("simulate")
}
}
} catch (e) {
status.setRollbackOnly()
}
}
Может кто-нибудь помочь, как я могу создать большие объемы элемента в отношениях/belongsTo hasMany, но откатить все при ошибке 1, из класса обслуживания.
точки 3 из [этого ответа] (http://stackoverflow.com/a/17357547/2051952) является то, что я предположим, это лучший вариант для вас в этом случае, если вы используете услуги grails. – dmahapatro