HikariCP icon indicating copy to clipboard operation
HikariCP copied to clipboard

no transaction is in progress by insert

Open paipeng opened this issue 2 years ago • 1 comments

Hello,

i am just trying to use HikariCP in my SpringBoot project for multi-datasources purpose (Multi-tenancy).

After some tests I can get SQL-query working. But I get exception:

Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress `2022-04-07 00:06:57.149 TRACE 33052 --- [nio-8080-exec-1] o.hibernate.event.internal.EntityState : Transient instance of: com.paipeng.saas.tenant.model.Product 2022-04-07 00:06:57.149 TRACE 33052 --- [nio-8080-exec-1] o.h.e.i.DefaultPersistEventListener : Saving transient instance 2022-04-07 00:06:57.150 TRACE 33052 --- [nio-8080-exec-1] o.h.e.i.AbstractSaveEventListener : Saving [com.paipeng.saas.tenant.model.Product#] 2022-04-07 00:06:57.153 TRACE 33052 --- [nio-8080-exec-1] org.hibernate.engine.internal.Cascade : Processing cascade ACTION_PERSIST for: com.paipeng.saas.tenant.model.Product 2022-04-07 00:06:57.153 TRACE 33052 --- [nio-8080-exec-1] org.hibernate.engine.internal.Cascade : Done processing cascade ACTION_PERSIST for: com.paipeng.saas.tenant.model.Product 2022-04-07 00:06:57.154 TRACE 33052 --- [nio-8080-exec-1] org.hibernate.engine.spi.ActionQueue : Adding an EntityIdentityInsertAction for [com.paipeng.saas.tenant.model.Product] object 2022-04-07 00:06:57.155 TRACE 33052 --- [nio-8080-exec-1] o.hibernate.engine.spi.IdentifierValue : ID unsaved-value: 0 2022-04-07 00:06:57.155 TRACE 33052 --- [nio-8080-exec-1] org.hibernate.engine.spi.ActionQueue : Adding insert with no non-nullable, transient entities: [EntityIdentityInsertAction[com.paipeng.saas.tenant.model.Product#delayed:1]] 2022-04-07 00:06:57.155 TRACE 33052 --- [nio-8080-exec-1] org.hibernate.engine.spi.ActionQueue : Adding resolved non-early insert action. 2022-04-07 00:06:57.156 TRACE 33052 --- [nio-8080-exec-1] o.hibernate.engine.spi.IdentifierValue : ID unsaved-value: 0 2022-04-07 00:06:57.157 TRACE 33052 --- [nio-8080-exec-1] org.hibernate.engine.internal.Cascade : Processing cascade ACTION_PERSIST for: com.paipeng.saas.tenant.model.Product 2022-04-07 00:06:57.157 TRACE 33052 --- [nio-8080-exec-1] org.hibernate.engine.internal.Cascade : Done processing cascade ACTION_PERSIST for: com.paipeng.saas.tenant.model.Product 2022-04-07 00:06:57.157 TRACE 33052 --- [nio-8080-exec-1] o.s.t.i.TransactionInterceptor : Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.saveAndFlush] after exception: javax.persistence.TransactionRequiredException: no transaction is in progress 2022-04-07 00:06:57.158 DEBUG 33052 --- [nio-8080-exec-1] o.s.orm.jpa.JpaTransactionManager : Participating transaction failed - marking existing transaction as rollback-only 2022-04-07 00:06:57.158 DEBUG 33052 --- [nio-8080-exec-1] o.s.orm.jpa.JpaTransactionManager : Setting JPA transaction on EntityManager [SessionImpl(512415116PersistenceContext[entityKeys=[], collectionKeys=[]];ActionQueue[insertions=ExecutableList{size=0} updates=ExecutableList{size=0} deletions=ExecutableList{size=0} orphanRemovals=ExecutableList{size=0} collectionCreations=ExecutableList{size=0} collectionRemovals=ExecutableList{size=0} collectionUpdates=ExecutableList{size=0} collectionQueuedOps=ExecutableList{size=0} unresolvedInsertDependencies=null])] rollback-only 2022-04-07 00:06:57.159 DEBUG 33052 --- [nio-8080-exec-1] cResourceLocalTransactionCoordinatorImpl : JDBC transaction marked for rollback-only (exception provided for stack trace)

java.lang.Exception: exception just for purpose of providing stack trace at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.markRollbackOnly(JdbcResourceLocalTransactionCoordinatorImpl.java:324) ~[hibernate-core-5.6.7.Final.jar:5.6.7.Final] at org.hibernate.engine.transaction.internal.TransactionImpl.markRollbackOnly(TransactionImpl.java:203) ~[hibernate-core-5.6.7.Final.jar:5.6.7.Final] at org.hibernate.engine.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImpl.java:224) ~[hibernate-core-5.6.7.Final.jar:5.6.7.Final] at org.springframework.orm.jpa.JpaTransactionManager$JpaTransactionObject.setRollbackOnly(JpaTransactionManager.java:712) ~[spring-orm-5.3.18.jar:5.3.18] at org.springframework.orm.jpa.JpaTransactionManager.doSetRollbackOnly(JpaTransactionManager.java:611) ~[spring-orm-5.3.18.jar:5.3.18] at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:844) ~[spring-tx-5.3.18.jar:5.3.18] at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) ~[spring-tx-5.3.18.jar:5.3.18] at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:672) ~[spring-tx-5.3.18.jar:5.3.18] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) ~[spring-tx-5.3.18.jar:5.3.18] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.18.jar:5.3.18] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.18.jar:5.3.18] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.18.jar:5.3.18] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.18.jar:5.3.18] at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[spring-data-jpa-2.6.3.jar:2.6.3] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.18.jar:5.3.18] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.18.jar:5.3.18] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.18.jar:5.3.18] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.18.jar:5.3.18] at jdk.proxy2/jdk.proxy2.$Proxy129.saveAndFlush(Unknown Source) ~[na:na] at com.paipeng.saas.tenant.service.ProductService.save(ProductService.java:47) ~[main/:na]

` when I want to save an object.

If I set "allow_update_outside_transaction: true", it works.

Looks like that my transaction is not found during runtime.

My Dev-Env is: Java 8; Spring Boot 2.6.6; HikariCP 4.0.3 with MySQL 8.0 under MAC OSX

Thanks for any advice.

Regards,

Pai

and the HikariConfig:

spring: datasource: hikari: connection-timeout: 20000 idle-timeout: 300000 max-lifetime: 900000 maximum-pool-size: 10 minimum-idle: 10 pool-name: ConnPool connection-test-query: select 1 driverClassName: com.mysql.cj.jdbc.Driver dataSourceClassName: show-sql: true format_sql: true ddl-auto: update dialect: org.hibernate.dialect.MySQL8Dialect allow_update_outside_transaction: false auto-commit: true data-source-properties: cachePrepStmts: true prepStmtCacheSize: 250 prepStmtCacheSqlLimit: 2048 useServerPrepStmts: true useLocalSessionState: true rewriteBatchedStatements: true cacheResultSetMetadata: true cacheServerConfiguration: true elideSetAutoCommits: true maintainTimeStats: false

paipeng avatar Apr 06 '22 16:04 paipeng

Hello,

just find a solution for my issue:

https://stackoverflow.com/questions/58102106/jpa-hib-not-saving-to-database-but-reading-db-mysql-hikari-tomcat-9-spring

It works for me.

Regards

Pai

paipeng avatar Apr 07 '22 01:04 paipeng