Postgres原生查询在SQL编辑器正常,SpringBoot JPA调用返回空是什么原因
JPA原生查询返回null问题排查点
- 月份参数不匹配:你在PostgreSQL SQL编辑器执行的测试语句筛选的是
extract(month from comm_mnth) = 8的2021年8月数据,但是代码调用JPA方法时第一个参数传入的是9,实际查询的是2021年9月的记录,若9月没有符合comm_type = 'DEVICE'条件的数据,自然返回null。 - extract返回值类型不匹配:PostgreSQL中
extract()函数的返回值为numeric浮点类型,和方法传入的int类型参数直接比较可能存在隐式转换异常,可修改查询语句将extract结果强转为int类型:
@Query(value = "select * from device_analytics where extract(year from comm_mnth)::int =:year and extract(month from comm_mnth)::int =:month and comm_type =:commType", nativeQuery = true) DeviceAnalyticsEntity findDeviceAnlayticsEntity(@Param("month") int month, @Param("year") int year, @Param("commType") String commType);
- 实体类映射失败:检查
DeviceAnalyticsEntity的字段映射规则,确认表列名和实体字段是否匹配,比如下划线转驼峰是否生效、自定义列是否加了@Column注解做映射,字段映射不匹配时JPA无法封装结果,会直接返回null。 - 连接环境错误:确认SpringBoot项目配置的PostgreSQL连接地址、库名、schema和你执行测试SQL的环境完全一致,避免出现连错测试/生产库导致查询无结果的问题。
内容的提问来源于stack exchange,提问作者Rohit Kotak
相关产品推荐
相关产品推荐

