使用Spring Boot @Query注解返回Employee列表时遇ClassCastException
问题解决:ClassCastException 异常处理
问题根源
你的Repository接口中方法的返回类型定义错误。<List>Employee这种写法并不是返回List<Employee>,而是声明了一个名为List的泛型参数,导致Spring Data JPA实际返回单个Employee实例,但你的代码试图将其强制转换为List<Employee>,从而触发ClassCastException。
解决方案
1. 修正Repository中的方法返回类型
将两个方法的返回类型从<List>Employee改为List<Employee>,明确返回员工列表,同时需要导入java.util.List包:
package com.employee.Dao; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.employee.Entities.Employee; import java.util.List; @Repository public interface UserRepository extends CrudRepository<Employee,Long> { @Query("select e FROM Employee e") public List<Employee> getAllEmployee(); @Query("From Employee e where e.fullName=:name") public List<Employee> getEmployeeByName(@Param("name") String name); }
2. 可选优化:使用CrudRepository内置方法
查询所有员工的需求,CrudRepository已经提供了findAll()方法,无需自定义@Query,直接调用即可简化代码:
// 在Service层直接调用该方法 List<Employee> allEmployees = userRepository.findAll();
验证修正
修正后,Service层的getAllEmployeeQuery()方法会正确获取List<Employee>实例,Controller中遍历打印的代码也能正常执行,不会再出现类型转换异常。
内容的提问来源于stack exchange,提问作者ahmad
相关产品推荐
相关产品推荐

