1. 程式人生 > >jpa查詢語句自動變成了update

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