我正在使用 Spring Boot 想要使用 @Query() 注释返回我的 Employee 类的所有列表,但它返回异常,这是我的代码 //这是我的存储库类
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;
@Repository
public interface UserRepository extends CrudRepository<Employee,Long> {
@Query("select e FROM Employee e")
public <List>Employee getAllEmployee();
@Query(value = " From Employee e where e.fullName=:name")
public <List>Employee getEmployeeByName(@Param("name") String name);
}
这是我的控制器类
@GetMapping("/main")
public String main(@ModelAttribute Employee employee, ModelMap model, HttpSession session) {
List<Employee> allEmployeeQuery = this.empservice.getAllEmployeeQuery();
allEmployeeQuery.forEach(a->System.out.println(a));
return "main";
}
我想使用 @Query() 注释获取 allEmploy 列表,但它抛出异常。这是例外的详细信息
[2m[nio-8080-exec-1][0;39m [36mo.a.c.c.C.[.[.[/].[dispatcherServlet] [0;39m [2m:[0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.ClassCastException: class com.employee.Entities.Employee cannot be cast to class java.util.List (com.employee.Entities.Employee is in unnamed module of loader 'app'; java.util.List is in module java.base of loader 'bootstrap')] with root cause
java.lang.ClassCastException: class com.employee.Entities.Employee cannot be cast to class java.util.List (com.employee.Entities.Employee is in unnamed module of loader 'app'; java.util.List is in module java.base of loader 'bootstrap')
at com.employee.service.EmpService.getAllEmployeeQuery(EmpService.java:22) ~[classes/:na]
at com.employee.MainController.main(MainController.java:37) ~[classes/:na]
我正在使用 Spring Boot 和 Hibernate。
您应该提及您需要哪个字段或字段作为结果。看起来您只有
ClassCastException
与第二个查询,因为您没有提及结果中需要哪些详细信息,而是在查询中设置 <List>Employee
返回类型。
用此更新您的查询并尝试。它可能会解决你的问题
ClassCastException
@Query(value = "SELECT e FROM Employee e WHERE e.fullName = :name")
public List<Employee> getEmployeeByName(@Param("name") String name);
除了 @Mark Rotteveel 在关于
List<Employee>
而不是 <List>Employee
的评论中所说的之外,请记住,因为您在项目中使用 spring-boot-starter-data-jpa 依赖项,所以您甚至不需要使用 @Query 进行此类简单查询。
您可以在 UserRepository 中定义以下单行代码,Spring Data JPA 将自动神奇地创建查询:
List<Employee> findAllByName(String name);
只要您在 UserRepository 中实现了 CrudRepository 或 JpaRepository,您就可以免费获得一大堆基本的 CRUD 操作查询。因此,在您的存储库之外,您可以执行以下操作:
List<Employee> employees = userRepository.findAll();
此外,这有点挑剔,但 UserRepository 绝对应该重命名为 EmployeeRepository。