Зафиксировать транзакцию JPA внутри методаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Зафиксировать транзакцию JPA внутри метода

Сообщение Anonymous »

Мой вариант использования:
  • Чтение данных
  • Сохранение данных в БД
  • Вызов REST-сервиса, который будет читать только что сохраненные данные
Проблема в том, что текущая транзакция не зафиксирована и вызываемый сервис их не видит. Я попытался разделить метод на несколько методов, имеющих собственную транзакцию.

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

@Service
public class ReportService {
private final MyFeignClient feignClient;

@EventListener
@Transactional(propagation = Propagation.REQUIRED)
public void handleUploadedFile(MyEvent event) {
final var dataHeader = saveReportData(event);
validate(dataHeader);
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public DataHeader saveReportData(MyEvent event) {
var dataHeader = DataHeader.builder()
.event(event)
.createdTs(LocalDateTime.now())
.build();
return dataHeaderRepository.save(dataHeader);
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void validate(DataHeader dataHeader) {
try {
final var response = feignClient.execute(ValidateRequest.builder()
.dataHeaderId(dataHeader.getId())
.build());
} catch (Exception e) {
log.error("Failed for DataHeader {}", e, dataHeader.getId());
}
}
}
Я рассматриваю возможность управления транзакциями вручную, если не существует лучшего способа.

Подробнее здесь: https://stackoverflow.com/questions/786 ... the-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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