如何解决SpringBoot-JPA删除不成功只执行了查询语句问题
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍了如何解决SpringBoot-JPA删除不成功只执行了查询语句问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Sp
千家信息网最后更新 2025年01月17日如何解决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安全错误
数据库的锁怎样保障安全
关于部署网络安全设备的通知
如何评价软件开发
欢乐枪战无法连接服务器
花旗银行软件开发具体做啥
荔湾区什么是网络技术开发分类
网络安全事件分几个级
预防网络安全教育教案
服务器烧模块
服务器上传软件
温州嗡嗡网络技术有限公司
贵州应急广播服务器虚拟主机
gomd服务器管理员
软件开发方向需要学什么
我为网络安全出谋划策
数据库语言分哪些
船舶配载仪软件开发公司
信息网络安全海报背景
网络安全观影心得300字
部队网络安全演讲稿500字
兄弟联软件开发
章丘软件开发
如何判断网络安全
金蝶k3数据库实体后缀
网络安全工程师招募
软件开发有什么要求吗
象山应用软件开发平台
软件开发培训的方法
为居民普及网络安全知识
表格宏批量处理数据库
兼职安卓软件开发