У меня есть приложение JavaEE, использующее Hibernate для подключения к базе данных. В какой-то части моего приложения у меня есть призывы к методу, который содержит аннотацию @Transactional
. В некоторых из этих случаев я хочу отменить всю транзакцию (вызов внешнего сервиса и внутренний). И в некоторых случаях я хочу откатить только внутренний вызов сервис-метода (то есть откат до savepoint, определенный в начале внутреннего метода).Как откат к вложенным транзакциям сохранения в Hibernate
Первая часть уже на месте, но у меня есть проблема со вторым. Когда я делаю следующее, я получаю «UnexpectedRollbackException» с сообщением «Транзакция откат, потому что она была отмечена как откат только».
@Service
public class OuterService{
@AutoWired
private InnerServcie innerService;
@Transactional
public void outer(){
try{
innerService.inner();
}catch(RuntimeException e){
//if i dont throw this up, it will give me the "UnexpectedRollbackException"
System.out.println("I cought a RuntimeException");
}
}
}
@Service
public class InnerServcie{
@Transactional
public void inner(){
//here we insert some data into db using hibernate
//but something goes wrong and an exception is thrown
}
}
Я добавил это к внутреннему методу, и я получаю в тупик! Есть идеи? – hfm