Исключение RuntimeException, возникающее после выполнения метода @Transactional, препятствующее фиксации метода @TransacJAVA

Программисты JAVA общаются здесь
Anonymous
Исключение RuntimeException, возникающее после выполнения метода @Transactional, препятствующее фиксации метода @Transac

Сообщение Anonymous »

У меня есть нетранзакционный метод, вызывающий транзакционный метод, а затем выдающий исключение RuntimeException после выполнения транзакционного метода.
Вот структура моего кода:
ValidateCodeService:

Код: Выделить всё

public void callingMethod(){
///some logic
if (codeReceivedFromUser != codeStoredInDB){
codeDTO.setNoOfRetries (codeDTO.setNoOfRetries() -1 );
codeRepository.update(codeDTO);
throw new RuntimeException(CodeError.CDE1);
}
}
>Репозиторий кода:

Код: Выделить всё

public class CodeRepository extends SuperRepository {
@Transactional
public codeDTO update (codeDTO dto){
///some logic
super.merge(TransformDTOToEntity(dto));
return dto;
}
}
Суперрепозиторий:

Код: Выделить всё

public class SuperRepository{
@Transactional
public void merge(T entity){
getEm.merge(entity);
getEm.flush();
}
}
Когда я проверяю свои журналы, я вижу, что запрос сбрасывается, но затем сразу же появляется журнал ошибок без фиксации:
спящий режим flash

[мой запрос на обновление]

ошибка журнала

[мой CodeError.CDE1]
Хотелось бы отметить, что я также вызываю CodeRepository.update из другого нетранзакционного метода, который не вызывает ошибок, и обновление фиксируется, как ожидалось.
Журнал для этот вызов выглядит так
hibernatelush

[мой запрос на обновление]

hibernate commit

JDBC-фиксация
Вопрос:
Почему транзакция не фиксируется после создания RuntimeException в вызывающем методе, хотя она успешно фиксируется в других случаях? Как я могу гарантировать, что мое обновление будет зафиксировано до того, как будет создано исключение?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-the-tr

Вернуться в «JAVA»