jpa查詢語句自動變成了update
這是之前寫的。
今天碰到了個奇怪的問題,明明dao中一個查詢函式,一直報connection read-only錯誤,斷點設定過去,發現明明一個select 查詢語句,一直到生成Query檢視變數裡面都是查詢的程式碼,可一執行就變成了update,簡直見了鬼了。
我的架構是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方法中,這個方法按道理也沒有寫入資料庫操作,但以防萬一吧,我改到了edit方法下,這個方法也就是開啟一個編輯頁面,其prepareEdit函式中執行了prepareModel,也不過根據傳遞的id從資料庫中查詢entity。
奇怪就奇怪在一執行到getCanXiaohu,看斷點也執行到了dao.findCanXiaohu(),實話說,我在前面查詢問題過程中,還把函式名都改成這樣了,原來沒有字首find、get,就如同上面說的,我斷點設定到查詢語句,一步步執行,生成query的時候看裡面的語句還是select,可一執行到query.getSingleResult(),它就直接異常,然後看輸出的語句,就成了一個update t_table的語句,其中的set語句set 各欄位的值,因為這個函式是查詢函式,沒加事務,所以不能執行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;
}
}
不報錯了,也執行查詢了,雖然成功了,可我還是不知道是怎麼回事。
記錄在這裡,期望大俠指點。
相關推薦
jpa查詢語句自動變成了update
這是之前寫的。 今天碰到了個奇怪的問題,明明dao中一個查詢函式,一直報connection read-only錯誤,斷點設定過去,發現明明一個select 查詢語句,一直到生成Query檢視變數裡面都是查詢的程式碼,可一執行就變成了upda
使用自定義註解和反射 ,自動生成查詢語句
runt entity forname == rop ava stat pri string 1.自定義表名註解 package com.lf.annotation; import java.lang.annotation.ElementType; import jav
MariaDB 10.3 解決掉了UPDATE不能在同一表中查詢的數據作為同一表的更新
mark itl 8.0 tex 分享 size select ext iad MariaDB 10.3 解決掉了UPDATE不能在同一表中查詢的數據作為同一表的更新,及支持UPDATE具有相同源和目標的更新語句。下面直接看案例CREATE TABLE t1 (c1 INT
JPA查詢資料後,修改其中的某個值,導致資料庫的值也修改了(JPA的生命週期)
問題描述 在一個迴圈中,通過JPA進行查詢後,修改查詢後的值,導致資料庫的值修改了 for (Integer integer : condition.getResourceIds()) { List<Integer> te
Spring Data Jpa框架自定義查詢語句返回自定義實體的解決方案
在使用Spring Data Jpa框架時,根據業務需求我們通常需要進行復雜的資料庫查詢,並返回我們自定義的實體類,而在該框架下,目前僅僅支援返回與資料庫對映進行持久化的POJO實體。雖然在框架上我們可以使用@Query註解執行我們自定義的sql語句,但是其返回值為List<Object[
當我們輸入一條 SQL 查詢語句時,發生了什麼?
我們經常說,看一個事兒千萬不要直接陷入細節裡,你應該先鳥瞰其全貌,這樣能夠幫助你從高維度理解問題。同樣,對於 MySQL 的學習也是這樣。平時我們使用資料庫,看到的通常都是一個整體。比如,你有個最簡單的表,表裡只有一個 ID 欄位,在執行下面這個查詢語句時: 複製程式
jpa查詢刪除相關語句
//id查詢 @Query("SELECT s FROM SysStudent s WHERE id= ? and s.state= '1' ")//and s.state= '1' SysStudent StudentById(String id); //模糊查詢 @Que
jpa(二)----jpa @Query註解 原生insert\delete\update\select語句
-- 如果@Query註解加上nativeQuery=true 則查詢語句使用原生sql,不加則使用HQL 一、jpa 原生insert的sql語句: @Modifying @Query(value = "insert into t_sys_org_use
hibernate查詢語句卻報Could not execute JDBC batch update錯誤的原因追蹤
業務系統在使用hibernate的list方法做查詢時報了以下的一個錯誤: org.hibernate.exception.DataException: Could not execute JDBC batch update,非常奇怪,我們當前的方法中並沒有做
mysql 將select查詢的值賦給update set語句中
表tenant_oper結構: create table `tenant_oper` ( `id` int(11) not null auto_increment, `oper_name` varchar(255) not null, `oper_code`
Spring Data Jpa 使用@Query標註自定義查詢語句
在使用JPA訪問關係型資料庫和Spring Data Jpa: 分頁和排序兩篇文章中我們學會了如何使用Spring Data Jpa 進行簡單的查詢以及分頁等功能,Spring Data Jpa本身所支援的功能已經非常強大了,也能夠支援大部分的場景。但是,現實場景永遠比想象的要複雜,有時候我們確實需要像S
面試常見查詢語句(能掌握這幾個例子就可以了)
摘要: 表結構: student(s#,sname,sage,ssex)學生表 course(c#,cname,T#)課程表 sc(s#,c#,score)成績表 Teacher(T#,tname)教師表 1.查詢001課程比002課程成績高的所有學生的學號:
mysql mysql的所有查詢語句和聚合函式(整理一下,忘記了可以隨時看看)
查詢所有欄位 select * from 表名; 查詢自定欄位 select 欄位名 from 表名; 查詢指定資料 selec
NumberFormatException: Invalid int類型不匹配異常——使用SQL數據庫查詢語句select * from blacknumber order by _id desc limit ?,20;出現
rom add ray 修改 java turn 技術分享 data color 異常:類型不匹配 05-06 08:12:38.151: E/AndroidRuntime(14904): java.lang.NumberFormatException: Invalid i
通用刪除查詢語句存儲過程
conditionALTER PROCEDURE [dbo].[sp_deletetable] @tablename nvarchar(100), @condition nvarchar(500)ASBEGINDECLARE @Sql nvarchar(800)SET @Sql=‘delete from [
MySQL 抓取SQL慢查詢語句
mysql 索引 數據表 sql慢查詢 逗哥自動化 當MySQL服務器出現異常(慢),首先要考慮是否因,SQL語句引起數據庫慢,如果情況比較緊急,我們就要立刻 SHOW FULL PROCESSLIST; 去查看,但我建議大家使用-e參數,采用非交互的方式,因為這樣可以使用grep
sqlit中使用到的查詢語句
join article pid 記錄 ack 時間排序 ont 連表 -1 近期使用sqlite查詢比較多,包含連表查詢等。記錄一下。以免忘記! 1.先依據時間排序後選擇前十條: select * from MyBill order by createTime
Oracle - 查詢語句 - 分組函數
出現 erb 現在 不同 max 過濾 group cnblogs 語句 /* 分組函數 不能再select子句中出現普通的列,除非這個列在group by中給出 所有的空值都會被分為一組 分組過濾
一張表多個字段是另一張表的主鍵,關聯查詢語句
left join phone where table 查詢語句 tab tin 主鍵 let CREATE TABLE `User`( `Id` BIGINT AUTO_INCREMENT NOT NULL, `Name` VARCHAR(10)
監聽數據庫查詢語句
cep nds mina blog true att param ati col namespace App\Providers; use Illuminate\Support\ServiceProvider; use Validator; class App