SpringBoot-JPA刪除不成功,只執(zhí)行了查詢語(yǔ)句問(wèn)題
SpringBoot-JPA刪除不成功,只執(zhí)行了查詢語(yǔ)句
今天使用JPA自定義了一個(gè)刪除方法deleteByUserIdAndCommentId發(fā)現(xiàn)并沒(méi)有刪除掉對(duì)應(yīng)的數(shù)據(jù),只執(zhí)行了查詢語(yǔ)句
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即可
再次執(zhí)行時(shí)會(huì)正常執(zhí)行
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踩坑記錄
今天寫(xiě)新模塊的一個(gè)刪除功能,測(cè)試的時(shí)候出了幾個(gè)問(wèn)題。
原代碼:
@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);
測(cè)試時(shí)報(bào)錯(cuò),大概是sql有問(wèn)題
于是乎我把該hql語(yǔ)句轉(zhuǎn)成sql語(yǔ)句去navicat上執(zhí)行了一遍,報(bào)錯(cuò)顯示sql語(yǔ)法有誤。
根據(jù)指示的錯(cuò)誤起始位置,懷疑是別名問(wèn)題,查了一下,sql的delete在使用別名時(shí) 在 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);
這下看起來(lái)沒(méi)問(wèn)題了,測(cè)試了一遍又報(bào)錯(cuò)了。
復(fù)制報(bào)錯(cuò)信息又去查了一下,發(fā)現(xiàn)對(duì)于執(zhí)行update和delete語(yǔ)句需要添加@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);
測(cè)試一遍,刪除成功。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot啟動(dòng)不了也不報(bào)錯(cuò)的問(wèn)題及解決
這篇文章主要介紹了springboot啟動(dòng)不了也不報(bào)錯(cuò)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
SpringMVC解析JSON請(qǐng)求數(shù)據(jù)問(wèn)題解析
這篇文章主要介紹了SpringMVC解析JSON請(qǐng)求數(shù)據(jù)問(wèn)題解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
java 增強(qiáng)型for循環(huán)語(yǔ)法詳解
增強(qiáng)型 for 循環(huán)(也稱為 “for-each” 循環(huán))是 Java 從 JDK 5 開(kāi)始引入的一種便捷循環(huán)語(yǔ)法,旨在簡(jiǎn)化對(duì)數(shù)組或集合類的迭代操作,這篇文章主要介紹了java 增強(qiáng)型for循環(huán) 詳解,需要的朋友可以參考下2025-04-04
總結(jié)Java常用的時(shí)間相關(guān)轉(zhuǎn)化
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java常用的時(shí)間相關(guān)轉(zhuǎn)化展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
java 通過(guò)cmd 調(diào)用命令啟動(dòng)tomcat的操作
這篇文章主要介紹了java 通過(guò)cmd 調(diào)用命令啟動(dòng)tomcat的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11

