如何解决SpringBoot-JPA删除不成功只执行了查询语句问题
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了如何解决SpringBoot-JPA删除不成功只执行了查询语句问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Sp
千家信息网最后更新 2026年11月01日如何解决SpringBoot-JPA删除不成功只执行了查询语句问题
这篇文章主要介绍了如何解决SpringBoot-JPA删除不成功只执行了查询语句问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
SpringBoot-JPA删除不成功,只执行了查询语句
使用JPA自定义了一个删除方法deleteByUserIdAndCommentId发现并没有删除掉对应的数据,只执行了查询语句
Hibernate: select good0_.id as id1_6_, good0_.commentId as commenti2_6_, good0_.userId as userid3_6_ from tbl_good good0_ where good0_.userId=? and good0_.commentId=?
解决方法
在删除方法前加注解@Transactional即可
再次执行时会正常执行
Hibernate: select good0_.id as id1_6_, good0_.commentId as commenti2_6_, good0_.userId as userid3_6_ from tbl_good good0_ where good0_.userId=? and good0_.commentId=?Hibernate: delete from tbl_good where id=?Hibernate: select comment0_.id as id1_3_0_, comment0_.articleId as articlei2_3_0_, comment0_.ccomment as ccomment3_3_0_, comment0_.goodNum as goodnum4_3_0_, comment0_.userId as userid5_3_0_, comment0_.userType as usertype6_3_0_ from tbl_comment comment0_ where comment0_.id=?
JPA中使用delete踩坑记录
今天写新模块的一个删除功能,测试的时候出了几个问题。
原代码:
@Query("delete from PrivateMessageEntity ae " + "where ((ae.sendId=?1 and ae.receiveId=?2)or(ae.sendId=?2 and ae.receiveId=?1)) " + "and ae.deleted=?3") int deleteDetailPrivateLetterList(Long sendId, Long receiveId, Boolean deleted);测试时报错,大概是sql有问题
于是乎我把该hql语句转成sql语句去navicat上执行了一遍,报错显示sql语法有误。
根据指示的错误起始位置,怀疑是别名问题,查了一下,sql的delete在使用别名时 在 delete 与from 之间的表别名不可省略
正确sql如下:
delete a.* from tb_table a where a.id=1;
修改之后的代码如下:
@Query(value = "delete ae.* from tb_zone_private_message ae " + "where ((ae.sendId=?1 and ae.receiveId=?2)or(ae.sendId=?2 and ae.receiveId=?1)) " + "and ae.deleted=?3",nativeQuery = true) int deleteDetailPrivateLetterList(Long sendId, Long receiveId, Boolean deleted);
这下看起来没问题了,测试了一遍又报错了。
复制报错信息又去查了一下,发现对于执行update和delete语句需要添加@Modifying注解。
修改后代码如下:
@Modifying @Query(value = "delete ae.* from tb_zone_private_message ae " + "where ((ae.sendId=?1 and ae.receiveId=?2)or(ae.sendId=?2 and ae.receiveId=?1)) " + "and ae.deleted=?3",nativeQuery = true) @Transactional int deleteDetailPrivateLetterList(Long sendId, Long receiveId, Boolean deleted);
测试一遍,删除成功。
感谢你能够认真阅读完这篇文章,希望小编分享的"如何解决SpringBoot-JPA删除不成功只执行了查询语句问题"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
语句
问题
成功
查询
篇文章
测试
别名
方法
代码
注解
之间
价值
位置
信息
兴趣
再次
几个问题
功能
同时
后代
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技
湖北九亚互联网络科技有限公司
广州紫鲸互联网科技有限公司
互联网科技产业
中关村互联网 科技集团
科技金融是不是互联网金融
中国互联网科技股
科技互联网项目
互联网是不是新科技
科技互联网公司装修
盈实互联网科技
云电互联网科技
天津摩尔互联网科技
开启互联网科技时代小说
江苏南京365互联网科技
随着互联网科技发展
浙江互联网科技研学营
玉溪互联网科技怎么选
江苏互联网智能科技产品出厂价
互联网的黑科技实验室
科技互联网
互联网金融 科技
互联网医疗科技
致骋互联网科技
互联网前沿科技
广西互联网科技孵化中心
黑科技 体验场景 互联网大会
全球科技与互联网公司市值变化
北京品多多互联网科技有限公司
利用互联网等科技手段