Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 保存实体时不使用@Transactional_Spring_Spring Mvc_Spring Data - Fatal编程技术网

Spring 保存实体时不使用@Transactional

Spring 保存实体时不使用@Transactional,spring,spring-mvc,spring-data,Spring,Spring Mvc,Spring Data,我们面临着一个与spring@Transactional相关的问题,我们有一个控制器和一个服务类,尽管服务类没有标记为@Transactional,但实体正在被保存。我们正在使用@EnableTransactionManagement(proxyTargetClass=true)和OpenEntityManagerViewInterceptor以及spring数据JPA。我猜这些信息可能不够充分,但对这种行为的可能原因有什么见解。实体持久化之前的日志很少 2016-01-07 20:58:15,

我们面临着一个与spring
@Transactional
相关的问题,我们有一个控制器和一个服务类,尽管服务类没有标记为
@Transactional
,但实体正在被保存。我们正在使用
@EnableTransactionManagement(proxyTargetClass=true)
OpenEntityManagerViewInterceptor
以及spring数据JPA。我猜这些信息可能不够充分,但对这种行为的可能原因有什么见解。实体持久化之前的日志很少

2016-01-07 20:58:15,393 DEBUG [org.springframework.data.repository.core.support.TransactionalRepositoryProxyPostProcessor$CustomAnnotationTransactionAttributeSource] (default task-23)  Adding transactional method 'save' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
2016-01-07 20:58:15,393 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] (default task-23)  Creating new transaction with name [org.springframework.data.envers.repository.support.EnversRevisionRepositoryImpl.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
2016-01-07 20:58:15,394 DEBUG org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl] (default task-23)  Skipping JTA sync registration due to auto join checking
2016-01-07 20:58:15,394 DEBUG [org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl] (default task-23)  Skipping JTA sync registration due to auto join checking
2016-01-07 20:58:15,394 DEBUG [org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl] (default task-23)  successfully registered Synchronization
2016-01-07 20:58:15,394 DEBUG [org.hibernate.jpa.spi.AbstractEntityManagerImpl] (default task-23)  Looking for a JTA transaction to join
2016-01-07 20:58:15,394 DEBUG org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler] (default task-23)  Joined JTA transaction
2016-01-07 20:58:15,394 DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory] (default task-23)  Returning cached instance of singleton bean 'jpaAuditingHandler'
2016-01-07 20:58:15,417 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] (smsQueueListenerBean-1)   Initiating transaction commit
2016-01-07 20:58:15,417 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] (smsQueueListenerBean-1)   Creating new transaction with name [smsQueueListenerBean]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2016-01-07 20:58:15,418 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] (emailQueueListenerBean-1)   Initiating transaction commit
2016-01-07 20:58:15,418 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] (emailQueueListenerBean-1)   Creating new transaction with name [emailQueueListenerBean]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2016-01-07 20:58:15,459 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] (default task-23)  Participating in existing transaction
2016-01-07 20:58:15,459 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] (default task-23)  Participating in existing transaction
2016-01-07 20:58:15,460 DEBUG [org.hibernate.engine.jdbc.internal.LogicalConnectionImpl] (default task-23)  Obtaining JDBC connection
2016-01-07 20:58:15,461 DEBUG [org.hibernate.engine.jdbc.internal.LogicalConnectionImpl] (default task-23)  Obtained JDBC connection
2016-01-07 20:58:15,463 DEBUG [org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl] (default task-23)  Starting ResultSet row #0
2016-01-07 20:58:15,463 DEBUG [org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl] (default task-23)  On call to EntityIdentifierReaderImpl#resolve, EntityKey was already known; should only happen on root returns with an optional identifier specified
2016-01-07 20:58:15,464 DEBUG [org.hibernate.engine.jdbc.internal.LogicalConnectionImpl] (default task-23)  Releasing JDBC connection
2016-01-07 20:58:15,465 DEBUG [org.hibernate.engine.jdbc.internal.LogicalConnectionImpl] (default task-23)  Released JDBC connection

总结我们在评论中讨论的内容:
是JpaRepository接口的默认实现。如果我们看一下这个实现,我们可以看到,默认情况下,我们使用的是只读事务(对于findAll等方法),而对于删除或保存服务,它们被注释为@transactional。优质教育基金

总结一下我们在评论中讨论的内容:
是JpaRepository接口的默认实现。如果我们看一下这个实现,我们可以看到,默认情况下,我们使用的是只读事务(对于findAll等方法),而对于删除或保存服务,它们被注释为@transactional。优质教育基金

你们能把一些类代码,JavaConfig,…?这是因为,正如你们所说,你们正在使用
OpenEntityManagerInViewInterceptor
,它在控制器中执行代码之前打开事务。或者不是?您确定在调用堆栈的前面没有带有@Transactional annotation的方法吗?请看以下内容:。这说明,由于使用spring数据,您的存储库是TransactionWare。因此,事务已经为您启动。您可以在类的开头看到@transactional,我们已经给了您答案:是的,因为SimpleParepository是用
@transactional
注释的,Spring Data JPA使用该类作为所有存储库接口的实现,这些接口是从JpaRepository扩展而来的。您可以放一些类代码JavaConfig,这是因为,正如您所说,您正在使用
OpenEntityManagerInViewInterceptor
,它在控制器中执行代码之前打开事务。或者不是?您确定在调用堆栈的前面没有带有@Transactional annotation的方法吗?请看以下内容:。这说明,由于使用spring数据,您的存储库是TransactionWare。因此,事务已经为您启动。您可以在类的开头看到@transactional,我们已经给了您答案:是的,因为SimpleParepository用
@transactional
注释,Spring Data JPA使用该类作为所有存储库接口的实现,谢谢你的启示:-)谢谢你的启示:-)