У меня есть некоторый код, подобный следующему
@Test
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void testCallDb() {
rollbackThis();
commitThis();
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Commmit
public void commitThis() {
//do some work and commit
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Rollback
public void rollbackThis() {
//do some work and rollback
}
Когда я запускаю это, он всегда откатывает оба метода, то есть он не фиксирует данные метода commitThis()
.Если я поставлю @Commit
на testCallDb()
, то оба метода будут зафиксированы, включая метод rollbackThis()
, который я хочу откатить.
Есть ли какое-либо решение для этого, используя аннотации Spring (предпочтительно) или используякакой-то другой метод?
Обновление: В качестве решения я использовал предложение @ Huy, то есть удалил аннотации из commitThis()
и rollbackThis()
и изменил тело testCallDb()
на:
rollbackThis();
TestTransaction.flagForRollback();
TestTransaction.end();
TestTransaction.start();
TestTransaction.flagForCommit();
commitThis();