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

Spring Boot客户数据分页过滤实现启动报错问题求助

问题原因

Spring Data JPA通过方法名称自动生成查询语句时,会严格匹配实体类的属性名。你定义的findByName方法会让框架尝试查找Customer实体中名为name的属性,但你的实体只有first_name和last_name两个独立属性,因此无法解析该方法,导致Repository Bean创建失败,进而引发依赖注入异常。

解决方案

提供两种可行的修复方式,可根据需求选择:

方式一:遵循Spring Data JPA命名规范修改方法名

根据实体属性名调整方法名称,用And连接两个查询条件,对应first_name和last_name属性:

@Repository
public interface CustomerRepository extends PagingAndSortingRepository <Customer, Integer>{
    Page<Customer> findByFirst_nameAndLast_name(String firstName, String lastName, Pageable pageable);
}

优化建议:Java代码规范中属性名推荐使用驼峰命名,建议将实体类的属性名改为驼峰格式,通过@Column映射数据库的下划线字段,这样方法名会更直观:

// 修改Customer实体的属性
@Column(name = "first_name")
private String firstName;

@Column(name = "last_name")
private String lastName;

// 对应的Repository方法
Page<Customer> findByFirstNameAndLastName(String firstName, String lastName, Pageable pageable);

方式二:使用@Query注解自定义查询语句

如果不想修改方法名,可通过@Query注解直接编写JPQL语句,绕过方法名解析逻辑:

@Repository
public interface CustomerRepository extends PagingAndSortingRepository <Customer, Integer>{
    @Query("SELECT c FROM Customer c WHERE c.first_name = :firstName AND c.last_name = :lastName")
    Page<Customer> findByName(@Param("firstName") String firstName, @Param("lastName") String lastName, Pageable pageable);
}

额外优化:处理可选参数的动态查询

你的Controller中firstName和lastName是可选参数,上述方案在参数为null时会查询属性等于null的记录,不符合实际需求。可修改JPQL支持空值判断:

@Query("SELECT c FROM Customer c WHERE (:firstName IS NULL OR c.first_name = :firstName) AND (:lastName IS NULL OR c.last_name = :lastName)")
Page<Customer> findByName(@Param("firstName") String firstName, @Param("lastName") String lastName, Pageable pageable);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:58:37