解決jpa查詢語句自動變成了update的問題
jpa查詢語句自動變成了update
今天碰到了個奇怪的問題,明明dao中一個查詢函數(shù),一直報connection read-only錯誤,斷點設置過去,發(fā)現(xiàn)明明一個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";
}
剛開始我以為是因為在action層我寫進了prepareModel方法中,這個方法按道理也沒有寫入數(shù)據(jù)庫操作,但以防萬一吧,我改到了edit方法下,這個方法也就是打開一個編輯頁面,其prepareEdit函數(shù)中執(zhí)行了prepareModel,也不過根據(jù)傳遞的id從數(shù)據(jù)庫中查找entity。
奇怪就奇怪在一執(zhí)行到getCanXiaohu,看斷點也執(zhí)行到了dao.findCanXiaohu(),實話說,我在前面查找問題過程中,還把函數(shù)名都改成這樣了,原來沒有前綴find、get,就如同上面說的,我斷點設置到查詢語句,一步步執(zhí)行,生成query的時候看里面的語句還是select,可一執(zhí)行到query.getSingleResult(),它就直接異常,然后看輸出的語句,就成了一個update t_table的語句,其中的set語句set 各字段的值,因為這個函數(shù)是查詢函數(shù),沒加事務,所以不能執(zhí)行update,所以就會異常出錯。但它就是個查詢,我也并不打算做修改,不知道為什么會出這樣的問題,怎么改都不行,也搞不明白是怎么回事。
我就各種試,最后, 我把語句改成了jpql標準語句,然后,居然可以了?。。。。?!
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;
}
}
不報錯了,也執(zhí)行查詢了,雖然成功了,可我還是不知道是怎么回事。
JPA框架中UPDATE語句問題
一定要加上下面這個兩個注解啊啊啊啊啊?。。。?!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Spring Boot+MyBatis框架做查詢操作的示例代碼
這篇文章主要介紹了使用Spring Boot+MyBatis框架做查詢操作的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
Java利用HttpClient模擬POST表單操作應用及注意事項
本文主要介紹JAVA中利用HttpClient模擬POST表單操作,希望對大家有所幫助。2016-04-04
SpringBoot啟動java.nio.charset.MalformedInputException: I
本文主要介紹了SpringBoot啟動java.nio.charset.MalformedInputException: Input length = 1報錯的解決方案2023-07-07
ArrayList?foreach循環(huán)增添刪除導致ConcurrentModificationException解決分
這篇文章主要為大家介紹了ArrayList?foreach循環(huán)增添刪除導致ConcurrentModificationException解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>2023-12-12
Spring Cloud Gateway + Nacos 實現(xiàn)動態(tài)路由
這篇文章主要介紹了Spring Cloud Gateway + Nacos 實現(xiàn)動態(tài)路由的方法,幫助大家實現(xiàn)路由信息的自動更新,感興趣的朋友可以了解下2020-10-10

