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
相关产品推荐
相关产品推荐

