You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MyBatis @Update执行报错,调整WHERE条件后能否解决问题?

解决MyBatis @Update 报错 "Expected one result (or null) to be returned by selectOne(), but found: 2"

问题回顾

你最初使用的MyBatis更新语句如下:

@Update("UPDATE TABLE_ROUTE SET TABLE_CODE =#{tableCode}, ACTIVE =#{active}, ROUTE_ID =#{routeId} WHERE TABLE_CODE=#{tableCode}")
int updateTableRoute(TableRoute tableRoute);

执行时触发报错:"Expected one result (or null) to be returned by selectOne(), but found: 2",原因是WHERE TABLE_CODE=#{tableCode}匹配到了数据库中的2条记录,不符合预期的单条更新逻辑。

修改后的语句有效性分析

你修改后的语句:

@Update("UPDATE TABLE_ROUTE SET TABLE_CODE =#{tableCode}, ACTIVE =#{active}, ROUTE_ID =#{routeId} WHERE TABLE_CODE=#{tableCode} and ROUTE_ID =#{routeId}")
int updateTableRoute(TableRoute tableRoute);

完全可以解决这个报错问题,原因如下:

  • 新增的ROUTE_ID =#{routeId}让WHERE条件的精准度大幅提升,只要TABLE_CODE和ROUTE_ID的组合是业务上的唯一标识(或者在当前场景下只会匹配到1条记录),这条UPDATE语句就只会命中并更新1条数据。
  • 当更新操作仅影响单条记录时,MyBatis的校验逻辑就不会再触发"找到多条结果"的报错。

额外建议

如果TABLE_CODE + ROUTE_ID并非表的唯一约束,建议你进一步确认业务逻辑,补充更精准的过滤条件(比如主键ID),确保每次更新操作都只会作用于预期的单条数据,避免后续出现类似问题。

内容的提问来源于stack exchange,提问作者anirudh reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:11:28