Spring环境下数据库有数据但JPA返回空数组问题排查
问题分析与解决:Spring查询数据库返回空数组
嘿,我一眼就发现了你的代码里有个非常明显的笔误,这大概率就是导致返回空数组的原因!
最直接的问题:Controller参数传递错误
看你的Controller方法里,调用Repository的findByCodeAndVersion时,第二个参数居然传成了appCode,而不是方法接收的appVersion:
// 错误写法:第二个参数误用了appCode return configRepository.findByCodeAndVersion(appCode, appCode);
这就意味着你实际在查询appCode=MANDL_LIVE且appVersion=MANDL_LIVE的数据,而不是你URL里传的appVersion=12.0,数据库里自然没有匹配的记录,所以返回空数组。
修正后的Controller代码
把第二个参数改成appVersion即可:
@RequestMapping(value = "/config", params = { "appCode", "appVersion" }, method = RequestMethod.GET) public List<AppConfig> getConfig(@RequestParam(value = "appCode", required = true) String appCode, @RequestParam(value = "appVersion", required = true) String appVersion) { System.out.println(appCode); System.out.println(appVersion); // 修正:第二个参数传入正确的appVersion return configRepository.findByCodeAndVersion(appCode, appVersion); }
额外排查点(如果修正后仍有问题)
- 确认数据库
app_config表中确实存在app_code='MANDL_LIVE'且app_version='12.0'的记录,注意字符串的大小写、格式完全匹配(比如数据库里是12.0还是12.0.0,有没有多余空格)。 - 检查JPQL语句是否正确:你的
@Query写法是没问题的,实体类字段和数据库列名的映射也正确(appCode对应app_code,appVersion对应app_version)。 - 仔细核对SQL日志:你说日志显示生成了正确的SQL,但可以再确认日志里的参数值是否和你预期的一致——如果之前的笔误存在,日志里的第二个参数应该是
MANDL_LIVE而不是12.0。
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

