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

Spring依赖注入异常排查:ProductRepo自定义查询验证失败

排查org.springframework.beans.factory.UnsatisfiedDependencyException异常及解决方法

异常详情

持续抛出org.springframework.beans.factory.UnsatisfiedDependencyException异常,报错链路如下:

  • 创建productController Bean失败:字段service依赖未满足
  • 创建productService Bean失败:字段repo依赖未满足
  • 创建com.example.ecomwebsitejava.repo.ProductRepo的productRepo Bean失败:无法为searchproduct方法生成查询,查询验证不通过

各层代码片段

Controller层(已添加@Autowired、@RestController注解)

@GetMapping("/products/search")
public ResponseEntity<List<Product>> searchproduct(@RequestParam String keyword)
{
    List<Product> products = service.searchproduct(keyword);
    return new ResponseEntity<>(products, HttpStatus.OK);
}

Service层(已添加@Service注解)

public List<Product> searchproduct(String keyword) {
    return repo.searchproduct(keyword);
}

Repo层(已添加@Repository注解)

public interface ProductRepo extends JpaRepository<Product, Integer> {
    @Query("SELECT p FROM Product p WHERE"+
   "LOWER(p.name) LIKE LOWER(CONCAT('%' , :keyword, '%')")
    List<Product> searchproduct(String keyword);
}

异常原因

核心问题出在Repo层的JPQL语句上:

  1. 语法错误:CONCAT('%' , :keyword, '%')缺少闭合的右括号,导致JPQL解析失败
  2. 潜在语法隐患:字符串拼接后WHERE和LOWER直接连在一起(WHERELOWER),属于无效的JPQL语法

这些错误导致Spring无法正确生成ProductRepo的代理Bean,进而引发后续依赖注入的连锁异常。

解决方法

修正Repo层的JPQL查询语句,补全括号并修复空格问题:

public interface ProductRepo extends JpaRepository<Product, Integer> {
    @Query("SELECT p FROM Product p WHERE " +
           "LOWER(p.name) LIKE LOWER(CONCAT('%', :keyword, '%'))")
    List<Product> searchproduct(String keyword);
}

额外检查项:

  • 确认Product实体类中存在name字段,且字段名称与JPQL中的p.name完全匹配(若使用默认命名策略,字段名大小写需一致)
  • 确保Service层通过@Autowired正确注入ProductRepo,Controller层通过@Autowired正确注入对应Service实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:31