Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment

17:12:47.358 [http-nio-11080-exec-2] ERROR c.c.f.w.e.GlobalExceptionHandler - [handleRuntimeException,100] - 請求地址'/xx/xxx/xxx/xxx/xxx/8bbe5b132a7a4d9bb28cedfeac94d69f',發生未知異常.
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '''. Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment [com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not use this method for "getSqlSegment"]at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:97)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)at com.sun.proxy.$Proxy129.delete(Unknown Source)at org.mybatis.spring.SqlSessionTemplate.delete(SqlSessionTemplate.java:304)at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:69)at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)at com.sun.proxy.$Proxy205.delete(Unknown Source)at com.baomidou.mybatisplus.extension.service.IService.remove(IService.java:146)at com.cn.basedata.service.impl.xxxxImpl.deletexxxIds(xxxxImpl.java:80)at com.cn.basedata.service.impl.xxxxImpl$$FastClassBySpringCGLIB$$35e8855a.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:792)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:707)at com.cn.basedata.service.impl.xxxxImpl$$EnhancerBySpringCGLIB$$94053a1.deletexxxByIds(<generated>)at com.cn.basedata.service.impl.xxxxImpl.deletexxxByIds(xxxxImpl.java:172)at com.cn.basedata.service.impl.xxxxImpl$$FastClassBySpringCGLIB$$17e90df0.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386)at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703)at com.cn.basedata.service.impl.xxxxImpl$$EnhancerBySpringCGLIB$$cf8fb23.deletexxxByIds(<generated>)at com.cn.web.controller.xxx.xxx.remove(xxx.java:221)at com.cn.web.controller.videom

其中,報錯的代碼如下 (xxxImpl.deletexxxIds() 方法):

@Transactional(rollbackFor = Exception.class)public boolean deletexxxIds(List<String> ids) {return ids != null && ! ids.isEmpty() ? this.remove(this.lambdaQuery().in(xxx::getId, ids)) : false;}

問題在于:

  1. lambdaQuery()?創建的是一個?LambdaQueryWrapper,而?remove()?方法內部會嘗試獲取?sqlSegment

  2. 在某些 MyBatis-Plus 版本中,這種鏈式調用會導致?getSqlSegment?方法被錯誤調用

解決方案

方案1:改用傳統 QueryWrapper(推薦)
@Override
@Transactional(rollbackFor = Exception.class)
public boolean deletexxxIds(List<String> ids) {if (ids == null || ids.isEmpty()) {return false;}QueryWrapper<xxx> wrapper = new QueryWrapper<>();wrapper.in("id", ids);return this.remove(wrapper);
}
?方案2:分離 Lambda 表達式構造
@Override
@Transactional(rollbackFor = Exception.class)
public boolean deletexxxIds(List<String> ids) {if (ids == null || ids.isEmpty()) {return false;}LambdaQueryWrapper<xxx> wrapper = Wrappers.lambdaQuery();wrapper.in(xxx::getId, ids);return this.remove(wrapper);
}
方案4:升級 MyBatis-Plus 版本

如果是版本問題(特別是 3.4.x 之前的版本),建議升級到最新穩定版:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>

為什么這樣修改有效?

原始代碼中的鏈式調用?this.remove(this.lambdaQuery().in(...))?在某些版本中會導致:

  1. 條件構造器被過早評估

  2. 內部嘗試獲取?sqlSegment?時上下文不完整

而分離構造步驟(方案2)或使用傳統 QueryWrapper(方案1)可以避免這種內部處理沖突。這是 MyBatis-Plus 實現細節導致的問題,官方文檔中也推薦避免過于復雜的鏈式調用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80929.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80929.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jmeter登錄接口生成一批token并寫入csv文件

背景&#xff1a;大部分項目真實的業務接口都是需要token鑒權的&#xff0c;想對一批核心業務接口進行并發壓測&#xff0c;必然要先生成一批token給這些接口并發循環調用。 基本的思路是這樣的&#xff1a;一批手機號csv文件 -》登錄接口循環讀取csv文件并生成token -》每次…

技術篇-2.3.Golang應用場景及開發工具安裝

Golang 雖然語法簡潔&#xff0c;上手也較快&#xff0c;但其在高并發、微服務和云原生領域的優勢明顯&#xff0c;要真正精通并靈活運用仍需積累大量實踐經驗。與 Java 借助重量級框架不同&#xff0c;Go 傾向于使用標準庫和輕量級第三方包來構建高性能、低延遲的系統。 1.1應…

Java面試問題基礎篇

面向對象 面向對象編程&#xff1a;拿東西過來做對應的事情 特征&#xff1a; 封裝&#xff1a;對象代表什么&#xff0c;就要封裝對應的數據&#xff0c;并提供數據對應的行為 繼承&#xff1a;Java中提供一個關鍵字extends&#xff0c;用這個關鍵字可以讓一個類和另一個類…

SpringBoot的前世今生

1. Spring Spring 特性&#xff1a;IOC、AOP、DI&#xff0c; Spring&#xff1a;解決對象耦合的問題&#xff0c;在 applicationContext.xml 中申明 bean&#xff0c;Spring在啟動時會解析xml文件進行裝載&#xff0c;當需要用對象時直接從容器中拿取bean。 Spring萬能膠&a…

微信小程序自行diy選擇器有效果圖

效果圖 實現思路 主要運用到小程序自帶視圖容器《swiper》 運用到的屬性《vertical》《display-multiple-items》《current》《animationfinish》 滑動方向變為縱向 vertical&#xff1a;true 顯示的滑塊數量 display-multiple-items&#xff1a;5 當前所在滑塊的 index curr…

【實用教程】如何快速搭建一套私有的埋點系統?

這篇教程將基于開源項目-ClkLog&#xff0c;教大家快速搭建一套自有的埋點系統&#xff0c;從0開始完成數據采集、分析與展示&#xff0c;全流程掌控用戶行為數據。 ClkLog是一款支持私有化部署的全開源用戶行為數據采集與分析系統&#xff0c;兼容Web、App、小程序多端埋點&am…

falsk模型-flask_sqlalchemy增刪改查

1、增、刪、改 增 home_bp.route(/useradd) def user_add():users []for i in range(10,20):user User()user.name 冰冰 str(i)user.age 20iusers.append(user)try:db.session.add_all(users)db.session.commit()return jsonify({code:1,info:success})except Exception…

【專題】機器學習期末復習資料

機器學習期末復習資料&#xff08;題庫&#xff09; 鏈接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148105494?sharetypeblogdetail&sharerId148105494&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【測試】 Art…

SpringCloud Alibaba微服務-- Sentinel的使用(筆記)

雪崩問題&#xff1a; 小問題引發大問題&#xff0c;小服務出現故障&#xff0c;處理不當&#xff0c;可能導致整個微服務宕機。 假如商品服務出故障&#xff0c;購物車調用該服務&#xff0c;則可能出現處理時間過長&#xff0c;如果一秒幾十個請求&#xff0c;那么處理時間過…

5:OpenCV—圖像亮度、對比度變換

1.更改圖像和視頻的亮度 更改亮度 更改圖像的亮度是常用的點操作。在此操作中&#xff0c;圖像中每個像素的值應增加/減少一個常數。要更改視頻的亮度&#xff0c;應對視頻中的每一幀執行相同的操作。 如果要增加圖像的亮度&#xff0c;則必須為圖像中的每個像素添加一些正常…

【工作流】Fastgpt配置豆包模型-火山引擎

V4.9.7 Fastgpt現在不通過oneapi 來配置模型和渠道了&#xff0c; 可以直接在頁面進行設置 首先在賬號- 模型提供商里面 填入豆包的信息&#xff1a; 渠道名隨便填&#xff0c;廠商選豆包&#xff0c; 然后選3個模型&#xff0c;如圖所示 如果沒有填入模型映射的話是沒辦法 …

2025年系統架構師---綜合知識卷

1.進程是一個具有獨立功能的程序關于某數據集合的一次運行活動,是系統進行資源分配和調度的基本單位(線程包含于進程之中,可并發,是系統進行運算調度的最小單位)。一個進程是通過其物理實體被感知的,進程的物理實體又稱為進程的靜態描述,通常由三部分組成,分別是程序、…

LangChain4j入門AI(六)整合提示詞(Prompt)

前言 提示詞&#xff08;Prompt&#xff09;是用戶輸入給AI模型的一段文字或指令&#xff0c;用于引導模型生成特定類型的內容。通過提示詞&#xff0c;用戶可以告訴AI“做什么”、 “如何做”以及“輸出格式”&#xff0c;從而在滿足需求的同時最大程度減少無關信息的生成。有…

如何使用 Docker Compose 部署 Immich

如何使用 Docker Compose 部署 Immich Immich 是一個開源的自建照片和視頻備份解決方案&#xff0c;通過 Docker 部署可以快速構建一個穩定的自主管理系統。本文將帶你一步步完成使用 Docker Compose 部署 Immich 的過程&#xff0c;幫助你在生產環境中實現高效的媒體管理。 1…

Mac遠程連接Windows電腦教程

在 Mac 上通過微軟官方遠程桌面工具&#xff08;Windows App&#xff09;連接局域網內的 Windows 電腦&#xff0c;需按照以下步驟操作&#xff1a; 一、準備工作 確認 Windows 版本支持遠程連接 Windows 專業版/企業版/教育版 支持遠程桌面功能。家庭版不支持&#xff0c;需使…

從0到1打造AI Copilot:用SpringBoot + ChatGPT API實現智能開發助手

本文將從0到1系統性地講解如何基于SpringBoot與OpenAI ChatGPT API打造一款智能開發助手&#xff08;AI Copilot&#xff09;。文章首先介紹AI Copilot的背景與價值&#xff0c;接著深入架構設計與環境準備&#xff0c;然后通過詳盡的代碼示例演示SpringBoot項目的搭建、依賴配…

Crawl4AI:高效的AI數據抓取工具

在大數據時代&#xff0c;抓取并處理大量數據是進行人工智能&#xff08;AI&#xff09;研究與開發的基礎。而網絡爬蟲是獲取網頁數據的重要工具。今天&#xff0c;我想介紹一個功能強大的爬蟲框架——Crawl4AI&#xff0c;它為數據抓取和機器學習任務提供了無縫的支持。Crawl4…

從單鏈表 list 中刪除第 i 個元素--Python

從單鏈表 list 中刪除第 i 個元素 一、問題引入二、解題步驟1.思維導圖2.解題步驟 三、代碼實現四、個人總結 一、問題引入 請編寫程序&#xff0c;將 n 個整數順次插入一個初始為空的單鏈表的表頭。隨后對任意給定的位序 i&#xff0c;刪除鏈表中第 i 個結點。注意&#xff1…

git學習與使用(遠程倉庫、分支、工作流)

文章目錄 前言簡介git的工作流程git的安裝配置git環境&#xff1a;git config --globalgit的基本使用新建目錄初始化倉庫&#xff08;repository&#xff09;添加到暫存區新增/修改/刪除 文件狀態會改變 提交到倉庫查看提交&#xff08;commit&#xff09;的歷史記錄git其他命令…

九、日志分析和系統故障排查

目錄 1、日志分析1.1、日志介紹1.1.1、日志的功能1.1.2、日志文件的分類1.1.3、日志保存位置1.2、rsyslog服務1.2.1、發送日志到遠程日志服務器1.3、查看日志文件1.3.1、/var/log/messages文件的內容示例1.3.2、用戶登錄、退出系統的相關日志1.4、日志級別1.5、程序日志分析1.6…