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布局之列表  新三国志曹操传主线渭水交兵攻略  如何用虚拟主机快速搭建网站?详细步骤解析