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

