Java Spring JPA Repository按Material查询返回空列表无报错求解
问题解决方案
核心修复与排查步骤
- 第一步:修复GET请求参数绑定问题
你的search接口为GET请求,用自定义ErgebnisseRequest对象接收参数时,需要添加@ModelAttribute注解完成参数映射,否则会出现参数注入失败、拿到null值的情况:@RequestMapping(value="/search", method=RequestMethod.GET) public List<Ergebnisse> Search(@ModelAttribute ErgebnisseRequest request){ // 可临时加日志确认参数是否正常拿到:System.out.println(request.getMaterial()); List<Ergebnisse> ergebnisseList = repository.findMaterial(request.getMaterial()); return ergebnisseList; } - 第二步:优化Repository查询写法,降低出错概率
你可以直接使用Spring Data JPA自带的方法名查询规则,不需要手动编写JPQL语句,避免拼写错误:// 替换原有带@Query注解的自定义方法即可,JPA会自动生成符合规则的查询语句 List<Ergebnisse> findByMaterial(String Material); - 第三步:校验参数一致性
- Postman调用时确认传参的key为
material,和ErgebnisseRequest的属性名保持完全一致 - 确认传入的参数值和数据库
material字段的存储值完全匹配(包括大小写、前后空格、特殊字符等)
- Postman调用时确认传参的key为
- 可选:忽略大小写查询适配
如果业务允许忽略大小写查询,可以调整查询方法为:
或者在JPQL中统一转小写匹配:List<Ergebnisse> findByMaterialIgnoreCase(String Material);@Query("FROM Ergebnisse where LOWER(Material) = LOWER(:Material)") List<Ergebnisse> findMaterial(@Param("Material") String Material); - 快速定位问题校验方法
临时修改controller逻辑写死测试参数,判断问题环节:
若此时能返回数据,说明问题出在请求参数绑定环节;若仍返回空,说明问题出在查询语句或实体字段映射环节。@RequestMapping(value="/search", method=RequestMethod.GET) public List<Ergebnisse> Search(@ModelAttribute ErgebnisseRequest request){ // 替换为你数据库中实际存在的material值测试 List<Ergebnisse> ergebnisseList = repository.findMaterial("实际存在的物料名称"); return ergebnisseList; }
内容的提问来源于stack exchange,提问作者Cristalix
相关产品推荐
相关产品推荐

