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

Spring Data JPA查询报错:orderinghoomId用List参数致非法参数异常

问题排查:Spring Data JPA查询方法参数不匹配异常

问题场景

需要从数据库查询满足以下条件的GoodsOrder数据:

  • 关联的orderinghoom的id在给定列表中
  • 状态为ON-WAY或SETTED

编写的查询方法如下:

List<GoodsOrder> findAllByOrderinghoomIdAndStatusIn(List<Long> roomId, Collection<OrderStatus> statuses);

执行时抛出异常:

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.TravelConcierge.Hotel.Repository.BookingRepository.findAllByOrderinghoomIdAndStatusIn(java.util.List,java.util.Collection); Operator SIMPLE_PROPERTY on orderinghoom.id requires a scalar argument, found interface java.util.List in method public abstract java.util.List com.TravelConcierge.Hotel.Repository.BookingRepository.findAllByOrderinghoomIdAndStatusIn(java.util.List,java.util.Collection)

问题原因

方法名中的OrderinghoomId对应实体的单个标量属性(orderinghoom.id),Spring Data JPA会默认生成等于匹配的SQL逻辑,但你传入的参数是List<Long>(集合类型),与标量属性的匹配逻辑冲突,因此抛出“需要标量参数却找到集合”的异常。

同时,你的需求是匹配id在列表中的数据,必须使用Spring Data JPA的In关键字声明集合匹配逻辑,原方法名缺少该关键字。

解决方案

修改查询方法名,在OrderinghoomId后添加In,明确表示集合匹配逻辑,同时保持参数类型不变:

List<GoodsOrder> findAllByOrderinghoomIdInAndStatusIn(List<Long> roomIds, Collection<OrderStatus> statuses);

逻辑说明

  • OrderinghoomIdIn:对应SQL中的orderinghoom.id IN ?,匹配id在传入列表中的数据
  • StatusIn:对应SQL中的status IN ?,匹配状态在指定集合中的数据
  • 两个条件通过And关联,最终生成的SQL会同时满足这两个过滤规则

内容的提问来源于stack exchange,提问作者Desta Equar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:13:16