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

迁移至Spring Boot 3后JPA查询出现类型转换异常问题

解决Spring Boot 3.0.4中JPA查询List参数的类型转换异常

异常原因

迁移到Spring Boot 3.0.4后,Hibernate 6对参数类型的校验变得更严格。原查询中使用coalesce(:users,1)='1'试图判断List参数是否为空的逻辑存在问题:coalesce函数会尝试将ArrayList类型的:users参数转换为String类型,而Hibernate无法完成这个转换,因此抛出类型转换异常。

修复方案

使用Spring Data JPA支持的SpEL表达式直接判断List参数是否为空或空集合,替换原有的coalesce逻辑,避免类型转换错误。同时修正number参数的空值判断语法,符合JPQL规范。

修改后的查询代码如下:

@Query(value ="select s from table s where "
        + "(:#{#users == null or #users.isEmpty()} or s.user in :users) and "
        + "(:#{#employees == null or #employees.isEmpty()} or s.employee in :employees) and "
        + "(:number is null or s.salary=:number)")
List<TableEntity> findTable(@Param("users") List<String> users,
        @Param("employees") List<String> employees,
        @Param("number") Long number,
        Pageable paging);

逻辑说明

  • :#{#users == null or #users.isEmpty()}:在查询执行前通过SpEL判断users参数是否为空或空集合,满足条件时该分支为真,直接跳过in子句的校验
  • 当users参数有效时,才会执行s.user in :users的条件判断
  • 同理处理employees参数,number参数采用JPQL标准的:number is null语法判断空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:04:54