Учитывая этот пример кода:Hibernate/Spring - Откат транзакции в рамках транзакции
public class MyServiceImpl implements MyService {
@Transactional
public void myTransactionalMethod() {
List<Item> itemList = itemService.findItems();
for (Item anItem : itemList) {
try {
processItem(anItem);
catch (Exception e) {
// dont rollback here
// rollback just one item
}
}
}
@Transactional
public void processItem(Item anItem) {
anItem.setSomething(new Something);
anItem.applyBehaviour();
itemService.save(anItem);
}
}
Вот что я хочу добиться:
- Только
processItem(anItem);
должен откатить, если исключение происходит внутри него. - Если возникло исключение,
myTransactionalMethod
должен продолжаться, это означает, что каждый из них должен заканчиваться. - Если исключение происходит внутри
myTransactionalMethod
, но не вprocessItem(anItem)
,myTransactionalMethod
должен полностью откатиться.
Есть ли решение, которое не включает управление транзакциями вручную (без аннотаций) ?.
Редактировать: Я думал об использовании @Transactional(PROPAGATION=REQUIRES_NEW)
, не знаю, будет ли он работать в одном и том же компоненте.
Спасибо, вот что я думал. – dantebarba