org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress

本文主要是介绍org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  关注这个问题,是因为我们的项目在使用jpa 和sharding分库分表以后,在跑test类的时候,save保存不进去数据,但是不报任何错。然后我把save改成saveAndFlush的时候,开始报这个错了。注意在service层已经加过@Transactional 注解了。 如果搜这个问题的,多数是因为没加@Transactional注解。

  没加sharding分库分表,是没问题的,能插进去数据。事务都用的好好的。但是加了sharing以后插入不进去数据了,然后只能通过启动项目调用 controller 才行。但是在定时任务里边去跑,也插入不进去数据。把save改成 saveAndFlush 就报一个错误,报的是没有事务的错误。

  于是就很费解了,我明明加了@transactional 注解了,为啥到了执行这一行,他就报没有事务呢?

  所以就查到 事务管理器上来了。

 

# # 先说下,如何在springboot中查看事务管理器

@Beanpublic Object testBean(PlatformTransactionManager platformTransactionManager){System.out.println(">>>>>>>>>>>"+platformTransactionManager.getClass().getName());return new Object();}

  启动项目,然后在控制台上就可以看到:

 

 

# # 查这个是为了查看为什么我明明添加了@Transactional 注解,但是还是报错

 报这个错:

  org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress
  可能你看到个错误,会觉得是 没有添加@Transaction注解,但是我明明已经在service层添加过了。

 

# #  最后解决方案就是 

  更换一下事务管理器,通过添加一个配置类,就可以替换了。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;import javax.annotation.Resource;
import javax.persistence.EntityManagerFactory;/*** @author angus* @create 2020-03-28 20:21*/
@Configuration
public class TransactionManagerConfig implements TransactionManagementConfigurer {@Resource(name="transactionManager")private PlatformTransactionManager txManager;//	// 创建事务管理器1
//	@Bean(name = "txManager1")
//	public PlatformTransactionManager txManager(DataSource dataSource) {
//		return new DataSourceTransactionManager(dataSource);
//	}// 创建事务管理器@Bean(name = "transactionManager")public PlatformTransactionManager txManager(EntityManagerFactory factory) {return new JpaTransactionManager(factory);}//其返回值代表在拥有多个事务管理器的情况下默认使用的事务管理@Overridepublic PlatformTransactionManager annotationDrivenTransactionManager() {return txManager;}}

 

# # 然后 问题解决了

这篇关于org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665308

相关文章

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

hibernate泛型Dao,让持久层简洁起来

【前言】hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据库。同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么我们在项目中如何灵活应用hibernate,也会给项目维护以及项目开发带来便利,下面我将展示我们项目中是如何来对hibernate进行应用和操作。 【目录】              -

POM文件第一行报错org.apache.maven.archiver.MavenArchiver.getManifest

前几天新建maven项目时,系统自动生成的POM文件第一行总是报错 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration) 百思不得其解,明明是自动生成的怎么还会有

org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction

org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction 这部分的具体地方为Transaction tr =(Transaction) session.beginTransaction();  错误原因:包倒错了,应该导入的包是hibernate的Transaction包

设计之道:ORM、DAO、Service与三层架构的规范探索

引言: 实际开发中,遵守一定的开发规范,不仅可以提高开发效率,还可以提高项目的后续维护性以及项目的扩展性;了解一下本博客的项目设计规范,对项目开发很有意义 一、ORM思想 ORM(Object-Relational-Mapping)在对象模型和关系型模型之间做一个映射(转换)。 目的是为了解决面向对象编程语言的发展和关系型数据库的发展不匹配的问题 可以理解为: 将Java中的数据结

【深度分析】报错:com.sun.org.apache.regexp.internal does not exist

文章目录 问题分析思路这个类在哪里?本地能跑,Jenkins 上不能跑?JDK 把这个 package 删掉了?JDK 啥时候把 package 删掉了?翻阅 JDK8 Release Notes查阅 Jakarta-regexp查阅 bug 说明 解决参考 问题 项目本地 mvn clean install 打包都正常,但是到 jenkins 中打包就会报错。 报错信息

org.springframework.core.convert.ConversionFailedException

适用: 1.你在springmvc.xml中写了静态资源处理<mvc:resources location="/" mapping="/**"></mvc:resources> 2.你在springmvc.xml中写了日期类型转换 解决方法: 首先检测你的spring版本,然后 1.spring3.0后将<mvc:resources location="/" mapping="/**">