解決jpa查詢語句自動(dòng)變成了update的問題
jpa查詢語句自動(dòng)變成了update
今天碰到了個(gè)奇怪的問題,明明dao中一個(gè)查詢函數(shù),一直報(bào)connection read-only錯(cuò)誤,斷點(diǎn)設(shè)置過去,發(fā)現(xiàn)明明一個(gè)select 查詢語句,一直到生成Query查看變量里面都是查詢的代碼,可一執(zhí)行就變成了update,簡直見了鬼了。
我的架構(gòu)是sshj,層次也就是entity,dao,service,action,代碼如下,非常簡單的代碼:
dao層:
public boolean findCanXiaohu(String code) { try { String queryStr = " select count(*) from t_tablename "; Query query = em.createNativeQuery(queryStr); Long res = (Long) query.getSingleResult(); if (res > 0) { return false; } else { return true; } } catch (Exception e) { return true; } }
serivce層:
public boolean getCanXiaohu(String code){ return dao.findCanXiaohu(code); }
action層:
public String edit(){ String res = super.edit(); if ("1".equals(entity.getYhzhanghuxingzhi())) { String code = entity.getYhcunkuanrenbianhao(); canXiaohu = service.getCanXiaohu(code); } else { canXiaohu = true; } return "input"; }
剛開始我以為是因?yàn)樵赼ction層我寫進(jìn)了prepareModel方法中,這個(gè)方法按道理也沒有寫入數(shù)據(jù)庫操作,但以防萬一吧,我改到了edit方法下,這個(gè)方法也就是打開一個(gè)編輯頁面,其prepareEdit函數(shù)中執(zhí)行了prepareModel,也不過根據(jù)傳遞的id從數(shù)據(jù)庫中查找entity。
奇怪就奇怪在一執(zhí)行到getCanXiaohu,看斷點(diǎn)也執(zhí)行到了dao.findCanXiaohu(),實(shí)話說,我在前面查找問題過程中,還把函數(shù)名都改成這樣了,原來沒有前綴find、get,就如同上面說的,我斷點(diǎn)設(shè)置到查詢語句,一步步執(zhí)行,生成query的時(shí)候看里面的語句還是select,可一執(zhí)行到query.getSingleResult(),它就直接異常,然后看輸出的語句,就成了一個(gè)update t_table的語句,其中的set語句set 各字段的值,因?yàn)檫@個(gè)函數(shù)是查詢函數(shù),沒加事務(wù),所以不能執(zhí)行update,所以就會(huì)異常出錯(cuò)。但它就是個(gè)查詢,我也并不打算做修改,不知道為什么會(huì)出這樣的問題,怎么改都不行,也搞不明白是怎么回事。
我就各種試,最后, 我把語句改成了jpql標(biāo)準(zhǔn)語句,然后,居然可以了?。。。。?!
public boolean findCanXiaohu(String code) { try { String queryStr = " select count(o) from ClassName o "; Query query = em.createQuery(queryStr); Long res = (Long) query.getSingleResult(); if (res > 0) { return false; } else { return true; } } catch (Exception e) { return true; } }
不報(bào)錯(cuò)了,也執(zhí)行查詢了,雖然成功了,可我還是不知道是怎么回事。
JPA框架中UPDATE語句問題
一定要加上下面這個(gè)兩個(gè)注解啊啊啊啊?。。。。?!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot AutoConfigureAfter控制Bean的注入順序方法詳解
這個(gè)文章主要介紹一下@AutoConfigureAfter在spring框架中的作用,在使用過程中,很多開發(fā)人員在使用它的時(shí)候都出現(xiàn)了問題,問題比較多的就是它們的注冊(cè)順序總不是我們預(yù)期的,下面介紹一下正常的使用方法,感興趣的朋友一起看看吧2024-05-05java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)順序表示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)順序表示例,需要的朋友可以參考下2014-03-03JDK與JRE的下載和安裝以及配置JDK環(huán)境變量圖文教程
JRE也就是(Java?RuntimeEnvironment)Java運(yùn)行環(huán)境,是運(yùn)行JAVA程序所必須的環(huán)境的集合,包含各種類庫,下面這篇文章主要給大家介紹了關(guān)于JDK與JRE的下載和安裝以及配置JDK環(huán)境變量的相關(guān)資料,需要的朋友可以參考下2023-12-12Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟
AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升了開發(fā)效率,本文將給大家介紹Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟2023-10-10