IN 子句的占位符 (?1) 写法在 JPA 原生查询中不支持直接传入集合参数导致 [exception] could not extract ResultSet
这个错误的原因非常经典IN子句的占位符(?1)写法在 JPA 原生查询中不支持直接传入集合参数。一、根本原因coalesce(?1, null) is null or ids IN (?1)能工作coalesce(?1, null)把参数当作单个值处理如果?1是null条件为真跳过IN检查如果?1有值比如字符串A,B,Cids IN (A,B,C)在 MySQL 中会被当作字符串比较相当于ids A,B,C语法上是合法的虽然逻辑可能不对?1 is null or ids IN (?1)报错当?1不是null时IN (?1)期望?1是一个集合/数组但 JPA 原生查询中?1只是一个占位符对应一个参数值如果你传入的是ListStringJPA 会尝试把它当作单个参数绑定但IN需要多个值于是报Operand should contain 1 column(s)说白了IN子句需要的是多个值但你只给了一个参数占位符?1。二、为什么coalesce版本能工作参数状态coalesce(?1, null) is null or ids IN (?1)实际效果?1 nulltrue or ...→ 整个条件为true不过滤查询全部 ✅?1 A,B,Cfalse or ids IN (A,B,C)MySQL 把A,B,C当作字符串IN变成ids A,B,C⚠️问题ids IN (A,B,C)在 MySQL 中不会报错但逻辑是错误的——它不等于ids IN (A, B, C)。三、你的写法实际想做什么你想实现的是如果参数为null不过滤如果参数有值按IN匹配。标准的 JPQL/原生 SQL 写法应该是sql-- ✅ 正确写法JPQL WHERE (:ids IS NULL OR score.ids IN (:ids))但前提是必须使用JPQLnativeQuery false而不是原生 SQLnativeQuery true。四、解决方案✅ 方案一改用 JPQL推荐java// 去掉 nativeQuery true Query(SELECT s FROM Score s WHERE (:ids IS NULL OR s.ids IN (:ids))) PageScore findByCondition(Param(ids) ListString ids, Pageable pageable);为什么 JPQL 可以JPA 会识别IN (:ids)中的:ids是集合参数自动展开为IN (?, ?, ?)。✅ 方案二使用MEMBER OFJPQLjavaQuery(SELECT s FROM Score s WHERE (:ids IS NULL OR s.ids MEMBER OF :ids)) PageScore findByCondition(Param(ids) ListString ids, Pageable pageable);✅ 方案三在 Service 层处理如果必须用原生 SQLjavapublic ListScore findByCondition(ListString ids) { if (ids null || ids.isEmpty()) { // 查询全部 return repository.findAll(); } // 用 IN 查询 return repository.findByIdsIn(ids); }✅ 方案四使用FIND_IN_SETMySQL 原生写法sqlWHERE (?1 IS NULL OR FIND_IN_SET(ids, ?1) 0)javaQuery(value SELECT * FROM score WHERE (?1 IS NULL OR FIND_IN_SET(ids, ?1) 0), nativeQuery true) PageScore findByCondition(Param(ids) String idsStr, Pageable pageable);传入idsStr A,B,C用逗号分隔的字符串。缺点FIND_IN_SET无法使用索引数据量大时性能差。✅ 方案五使用IN 动态 SQLMyBatis 方式如果项目允许用 MyBatis 的foreach动态拼接xmlselect idfindByCondition SELECT * FROM score where if testids ! null and ids.size() 0 ids IN foreach collectionids itemid open( separator, close) #{id} /foreach /if /where /select五、为什么coalesce写法会隐藏问题写法实际行为coalesce(?1, null) is null or ids IN (?1)参数为null时跳过参数有值时MySQL 把?1当作字符串IN变成比较不会报错但逻辑可能不对?1 is null or ids IN (?1)参数有值时IN期望多个值但只收到一个直接报错所以coalesce版本不是正确只是不报错但查询结果可能不符合预期。六、总结问题原因解决方案?1 is null or ids IN (?1)报错原生 SQL 中IN不支持单个占位符传集合改用 JPQL 或 Service 层处理coalesce版本能工作IN (?1)被 MySQL 当作字符串比较不报错但逻辑可能错误不要使用这种写法正确做法用 JPQL 的IN (:ids)去掉nativeQuery true建议如果你必须用原生 SQL就在 Service 层判断参数是否为空分别处理如果能用 JPQL就去掉nativeQuery用 JPQL 的IN (:ids)写法。

相关新闻

QobuzDownloaderX-MOD项目概览:AiiR重构版音乐下载工具核心功能解析

QobuzDownloaderX-MOD项目概览:AiiR重构版音乐下载工具核心功能解析

QobuzDownloaderX-MOD项目概览:AiiR重构版音乐下载工具核心功能解析 【免费下载链接】QobuzDownloaderX-MOD Downloads streams directly from Qobuz. Experimental refactoring of QobuzDownloaderX by AiiR 项目地址: https://gitcode.com/gh_mirrors/qo/QobuzD…

2026/10/16 4:48:19 阅读更多 →
Slug标签系统实现:如何为短链接添加分类和筛选功能

Slug标签系统实现:如何为短链接添加分类和筛选功能

Slug标签系统实现:如何为短链接添加分类和筛选功能 【免费下载链接】slug 🌱 An open-source URL shortener built with T3 Stack. 项目地址: https://gitcode.com/gh_mirrors/slug/slug Slug是一个基于T3 Stack构建的开源URL缩短工具&#xff0c…

2026/10/16 4:53:38 阅读更多 →
rtsp-stream API完全指南:掌握4个关键端点实现流媒体管理

rtsp-stream API完全指南:掌握4个关键端点实现流媒体管理

rtsp-stream API完全指南:掌握4个关键端点实现流媒体管理 【免费下载链接】rtsp-stream Out of box solution for RTSP - HLS live stream transcoding. Makes RTSP easy to play in browsers. 项目地址: https://gitcode.com/gh_mirrors/rt/rtsp-stream rts…

2026/10/19 0:41:01 阅读更多 →

最新新闻

HTTP/3与QUIC深度解析:从队头阻塞到部署实战

HTTP/3与QUIC深度解析:从队头阻塞到部署实战

浏览器原理这个系列写到现在,HTTP/3是我最想写又最不敢写的一篇。说不敢,是因为HTTP/3表面看只是HTTP协议的第三个大版本,内核里却把传输层的底座整个换了——它不像HTTP/1.1到HTTP/2那样只在应用层做文章,而是直接把协议栈从TCP搬…

2026/10/19 4:09:35 阅读更多 →
开放式代码审查实战:从流程搭建到协作效率提升

开放式代码审查实战:从流程搭建到协作效率提升

我接手过好几个中型仓库,里面有大量“高危但能跑到上线”的代码:吞掉的异常、裸奔的权限校验、藏在注释里的临时逻辑。很多都能在上线前被拦下来,前提是有人在Review时真的盯住了。这也是我为什么想写这篇关于open-code-review文章的原因。这…

2026/10/19 4:09:35 阅读更多 →
开源代码评审工具 open-code-review:把 Code Review 变成可量化的工程习惯

开源代码评审工具 open-code-review:把 Code Review 变成可量化的工程习惯

提到 code review,不少团队的回答都是“我们在做”,但真去翻一遍仓库的合并记录,会发现大量 PR 都是一个人开发、另一个人在合并前点了通过。评审更像走流程,而不是讨论问题。我维护了一个叫 open-code-review 的开源项目&#xf…

2026/10/19 4:09:35 阅读更多 →
STM32F103ZET6循迹小车竞速方案:灰度传感器与PID控制实战

STM32F103ZET6循迹小车竞速方案:灰度传感器与PID控制实战

简介:面向智能车竞速与STM32嵌入式学习的循迹小车完整工程,以72MHz主频的STM32F103ZET6作为核心控制器,机械结构采用舵机加双编码电机,通过一字排列的灰度传感器阵列识别黑线,从而检测车身在直道、环岛、S弯和连续直角…

2026/10/19 4:09:35 阅读更多 →
开放式代码评审的完整实践指南:从机制到落地

开放式代码评审的完整实践指南:从机制到落地

代码评审这件事,我干了快十年,到现在还是会劝刚带团队的朋友一句:先把评审机制立起来,再谈什么敏捷流程、DevOps 文化。open-code-review 这个名字,听起来像某个开源库,本质上却代表了我这些年一直在推的做…

2026/10/19 4:09:35 阅读更多 →
LSTM原理详解与工程加速:从梯度消失到推理优化

LSTM原理详解与工程加速:从梯度消失到推理优化

最近在某个工业设备的时序预测项目里,我把LSTM重新捡起来用了一遍。说实话,这两年Transformer在序列任务上的声量确实大,很多新入行的同学一上来就研究注意力机制,反而把LSTM这个经典的循环结构给忽略了。但手头这个项目跑下来&am…

2026/10/19 4:08:35 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →