Я' Я пытаюсь перейти с Spring 4.3.9.RELEASE/Hibernate 4.3.6.Final на Spring 5.0.4.RELEASE/Hibernate 5.2.14.Final. Код не изменяется, за исключением изменения зависимостей по мере необходимости и изменения имен пакетов на hibernate5 по мере необходимости. Я продолжаю получать исключение javax.persistence.TransactionRequiredException: транзакция не выполняется
Атрибут @Transactional применяется в соответствующих местах. Я провел много исследований, чтобы выяснить, почему, особенно когда это применимо к переходу с одной версии на другую. Следующий журнал фактически показывает, что транзакция запущена, но исключение все равно выдается
Код: Выделить всё
14:39:28,719 DEBUG [main] org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:55) - begin
14:39:28,719 TRACE [main] org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.begin(AbstractLogicalConnectionImplementor.java:66) - Preparing to begin transaction via JDBC Connection.setAutoCommit(false)
14:39:28,719 TRACE [main] org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.begin(AbstractLogicalConnectionImplementor.java:68) - Transaction begun via JDBC Connection.setAutoCommit(false)
14:39:28,719 TRACE [main] org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.afterBeginCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:150) - ResourceLocalTransactionCoordinatorImpl#afterBeginCallback
javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3466) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294) [spring-tx-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) [spring-tx-5.0.4.RELEASE.jar:5.0.4.RELEASE]
14:39:28,812 DEBUG [main] org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:98) - rolling back
14:39:28,812 TRACE [main] org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:115) - Preparing to rollback transaction via JDBC Connection.rollback()
Код: Выделить всё
@Override
public boolean isJoined() {
return physicalTransactionDelegate != null && getTransactionDriverControl().isActive( true );
}
Это конфигурация Java. Сбой кода очень прост. Кто-то автоматически подключил дао и вызывает следующий метод. По сути, он проверяет, существует ли запись в базе данных, если она существует, обновляет ее или создает новую.
Код: Выделить всё
@Transactional(propagation = Propagation.REQUIRED)
public void registerApplication(final ApplicationType type, final Class versionedClass, final String extraData) throws Exception {
final Properties pr = getVersionInformation(versionedClass);
final String commit = pr.getProperty("git.commit.id");
if (commit == null) {
throw new NullPointerException("Could not find property git.commit.id");
}
VersionInfo info = extraData == null ? findBy(type, commit) : findBy(type, commit, extraData);
if (info != null) {
log.info("Found entry for the version, just updating usage count");
info.incrementUsageCount();
} else {
info = new VersionInfo();
info.setApplicationType(type);
info.setCommitId(commit);
info.incrementUsageCount();
info.setExtraData(extraData);
}
save(info);
log.info("Saved version information for {}:{}:{}", type, commit, extraData);
}
Подробнее здесь: https://stackoverflow.com/questions/495 ... rogress-af
Мобильная версия