- Java: с 8 на 11
- Весна: с 4.3.30.RELEASE до 5.1.20.RELEASE
- Спящий режим: с 5.2.13.Final до 5.4.33.Final
< blockquote>
rg.springframework.dao.InvalidDataAccessApiUsageException: ни одна транзакция не выполняется; вложенным исключением является javax.persistence.TransactionRequiredException: транзакция не выполняется
в org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:403)
в org.springframework.orm.jpa. vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:256)
Вот пример метода службы, которому не удается инициировать транзакцию:
Java
Код: Выделить всё
@Service
public class TicketServiceImpl {
public TicketServiceImplV2() {
System.out.println("TicketServiceImplV2 instantiated: " + this);
}
@Autowired
private TicketUpdatePersistence ticketPersistence;
@Transactional
public void createTicketUpdate(TicketUpdate update) {
Ticket ticket = ticketPersistence.findById(update.getTicket().getId())
.orElseThrow(() -> new EntityNotFoundException("Ticket not found"));
System.out.println("Transaction active: " + TransactionSynchronizationManager.isActualTransactionActive());
Ticket lockedTicket = ticketPersistence.findOneForUpdate(ticket.getId())
.orElseThrow(() -> new BadRequestException("No ticket found for update"));
}
}
Что я пробовал:
Конфигурация транзакции: существует только один журнал " TicketServiceImplV2 создан", поэтому это говорит о том, что экземпляр вашей службы создается только в одном контексте (вероятно, в основном контексте), а не в обоих контекстах.
Я проверил, что менеджер транзакций настроен правильно:
XML
Код: Выделить всё
Нет самовызова: я убедился, что есть нет самовызова метода @Transactional, поскольку он вызывается извне.
Механизм блокировки: уровень сохраняемости использует пессимистическую блокировку в методе findOneForUpdate:
Java
Код: Выделить всё
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("SELECT t FROM Ticket t WHERE t.id = :id")
Ticket findOneForUpdate(@Param("id") String ticketId);
Код: Выделить всё
com.quicktech.quicktech.common.model
Код: Выделить всё
Код: Выделить всё
- Что может быть причиной того, что транзакции не активируются после перехода с Spring 4.3 на 5.1 и Hibernate С 5.2 по 5.4?
- Есть ли какие-либо известные изменения в Spring 5 или Hibernate 5.4, которые могут повлиять на поведение управления транзакциями?
- Может ли эта проблема быть связана переходу с Java 8 на Java 11, и если да, то как мне решить эту проблему?
- База данных: PostgreSQL 12
- Весенняя версия: 5.1.20.RELEASE
- Версия Hibernate: 5.4.33 .Окончательная
- Версия Java: 11.0.24
- Сервер приложений: Apache Tomcat 9.0.55
Подробнее здесь: https://stackoverflow.com/questions/790 ... -to-5-1-20
Мобильная версия