Spring boot jpa 删除数据和事务管理的问题实例详解
发布时间 - 2026-01-11 03:23:56 点击率:次今天我们介绍的是jpa删除和事务的一些坑,接下来看看具体内容。

业务场景(这是一个在线考试系统)和代码:根据问题的id删除答案
repository层:
int deleteByQuestionId(Integer questionId);
service 层:
public void deleteChoiceAnswerByQuestionId(Integer questionId) {
choiceAnswerRepository.deleteByQuestionId(questionId);
测试层:
@Test
public void testDeleteByQuestionId() {
choiceAnswerService.deleteChoiceAnswerByQuestionId(5);
System.out.println("hehehhe");
System.out.println("hehehhe");
System.out.println("hehehhe");
System.out.println("hehehhe");
System.out.println("hehehhe");
System.out.println("hehehhe");
System.out.println("hehehhe");
}
问题1:如果各层都不加事务管理的话
@Transactional
会报这个错误
org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process ‘remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process ‘remove' call
当我们除了query外的modiy和delete外如果没有各层的方法中进行事务管理的话也就是没加@Transactional话会报错
问题2:只在test层加@Transactional
没有错误但是数据并没有被删除,在用IDEA的调试是,在执行这个测试方法的过程时还可以在choiceanswer表中进行操作并没有加锁事务并没有起作用
问题3:只在 Repository层加@Transactional
public void deleteChoiceAnswerByQuestionId(Integer questionId) {
choiceAnswerRepository.deleteByQuestionId(questionId);
System.out.println(“hehehhe”);
System.out.println("hehehhe");
// questionRepository.delete(5);
System.out.println(“hehehhe”);
System.out.println("hehehhe");
System.out.println("hehehhe");
System.out.println("hehehhe");
System.out.println("hehehhe");
}
这时当执行完
choiceAnswerRepository.deleteByQuestionId(questionId);
数据里面被修改
问题4:只在 service层加@Transactional
当只有执行完service内的对应方法时数据才会被删除
问题5:在service 层和Repository都加上@transactional
当只有执行完service内的对应方法时数据才会被删除
问题6:只要在test(或者是除了service层和Repository层)加上@Transactional,不管service层和Repository层加不加@Transactional数据都不会被删除
问题7:
@Modifying @Query(“delete from ChoiceAnswer c where c.question.id=?1 “) @Transactional int deleteByQuestionId(Integer questionId);
与
@Transactional int deleteByQuestionId(Integer questionId);
有什么区别,上面的会直接执行delete语句
下面的会先执行select 再执行delete
总结:
事务管理只有在service加上事务管理才起作用,query不需要事务管理但是delete update但需要事务管理为了不在Service层不加事务管理可以再Repository层的delete uodate加上@transactional 但这样不能真正保持事务的完整性.
本文关于Spring boot jpa 删除数据和事务管理的问题实例详解的介绍就到这里,希望对大家有所帮助,欢迎大家参阅本站其他专题。
# spring
# boot
# jpa
# 事务
# 删除
# springmvc+Hibernate+JPA(混合事务)解读
# SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例
# Spring JPA事务管理与自定义操作实例解析(最新推荐)
# 只在
# 不加
# 才会
# 会报
# 的是
# 还可以
# 不需要
# 这是一个
# 如果没有
# 或者是
# 来看看
# 欢迎大家
# 当我们
# 报错
# 就到
# 有什么区别
# 具体内容
# 会先
# 加锁
# 只要在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何自定义建站之星网站的导航菜单样式?
潮流网站制作头像软件下载,适合母子的网名有哪些?
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Laravel distinct去重查询_Laravel Eloquent去重方法
如何在香港服务器上快速搭建免备案网站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
如何制作一个表白网站视频,关于勇敢表白的小标题?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何利用DOS批处理实现定时关机操作详解
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
香港服务器WordPress建站指南:SEO优化与高效部署策略
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Python高阶函数应用_函数作为参数说明【指导】
Python图片处理进阶教程_Pillow滤镜与图像增强
三星、SK海力士获美批准:可向中国出口芯片制造设备
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Laravel Fortify是什么,和Jetstream有什么关系
HTML 中动态设置元素 name 属性的正确语法详解
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Laravel如何生成API文档?(Swagger/OpenAPI教程)
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
JS弹性运动实现方法分析
零服务器AI建站解决方案:快速部署与云端平台低成本实践
用yum安装MySQLdb模块的步骤方法
如何在不使用负向后查找的情况下匹配特定条件前的换行符
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
深入理解Android中的xmlns:tools属性
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
JavaScript如何实现错误处理_try...catch如何捕获异常?
Laravel怎么实现验证码(Captcha)功能
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
如何在云主机上快速搭建多站点网站?
网站图片在线制作软件,怎么在图片上做链接?
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Bootstrap CSS布局之列表
新三国志曹操传主线渭水交兵攻略
如何用虚拟主机快速搭建网站?详细步骤解析

