为什么Spring Boot native query原生查询总是返回null?
问题排查与解决步骤
断点无法命中90%以上的场景都是Repository未被Spring正确扫描注册,优先排查该项
- 校验Repository接口注册状态
确认定义getServices方法的JPA Repository接口添加了@Repository注解,且所在包在Spring Boot的组件扫描范围内。如果启动类和Repository不在同一级包下,需要在启动类上添加@EnableJpaRepositories(basePackages = "你的Repository接口所在包全路径")显式指定扫描路径,确保Spring为该接口生成代理实现类。 - 校验参数与SQL执行结果
在调用getServices方法的位置打印三个入参acctid、bizid、active的取值,和你直接在MySQL中执行的SQL参数做对比,避免入参为空、字符串前后带空格、类型不匹配导致查询无结果。
同时可以在配置文件中添加如下配置,打印框架实际执行的SQL和绑定的参数,复制到MySQL中手动执行验证:spring.jpa.show-sql=true logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace - 校验实体字段映射关系
原生查询默认使用下划线转驼峰的命名规则做字段映射,检查Service实体类的字段是否和customize_service表的字段匹配。如果存在不匹配的字段(比如表字段service_name对应实体字段svcName),需要在对应实体字段上添加@Column(name = "service_name")显式指定映射的表字段名,避免字段映射失败返回空对象。 - 异常定位
完整输出Eclipse抛出的异常栈:如果是方法不存在、代理类初始化失败类的异常,属于Repository注册问题;如果是参数绑定、SQL语法类异常,检查@Param注解的参数名是否和SQL中占位符一致,SQL语法是否符合你使用的MySQL版本规范。
内容的提问来源于stack exchange,提问作者Robot Pepper
相关产品推荐
相关产品推荐

