Поэтому я проверил и сеанс Hibernate Session был открыт даже после завершения транзакции и больше не был активен (согласно распечатке):
Код: Выделить всё
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@PutMapping(value = "/{employeeId}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public EmployeeDto updateEmployee( @PathVariable Long employeeId, @Valid @RequestBody UpdateEmployeeDto updateEmployeeDto) {
Employee employee = employeeService.updateEmployee(employeeId, updateEmployeeDto);
System.out.println("Transaction Active: " +
TransactionSynchronizationManager.isActualTransactionActive()); // prints false
Session hibernateSession = entityManager.unwrap(Session.class);
System.out.println("Hibernate Session Open: " + hibernateSession.isOpen()); //prints true
return employeeMapper.toDto(employee);
}
В методе обновления сотрудника используется пустой @Transactional, и не применяется расширенный контекст персистентности.
Я помню, как получал LazyInitExceptions при преобразовании в проекции DTO из предыдущих проектов. Должно быть, я что-то упускаю, хотя для управления транзакциями/сессиями в этом проекте не было специальной настройки.
Подробнее здесь: https://stackoverflow.com/questions/778 ... -committed
Мобильная версия