Spring Boot 使用@Query()返回员工列表时出现异常[已关闭]

slsn1g29  于 2023-11-17  发布在  Spring
关注(0)|答案(2)|浏览(165)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
12天前关闭
Improve this question
我正在使用Sping Boot ,希望使用@Query()annotation返回我Employee类的所有列表,但它返回了异常:这里是我的代码//这里是我的存储库类

  1. package com.employee.Dao;
  2. import org.springframework.data.jpa.repository.Query;
  3. import org.springframework.data.repository.CrudRepository;
  4. import org.springframework.data.repository.query.Param;
  5. import org.springframework.stereotype.Repository;
  6. import com.employee.Entities.Employee;
  7. @Repository
  8. public interface UserRepository extends CrudRepository<Employee,Long> {
  9. @Query("select e FROM Employee e")
  10. public <List>Employee getAllEmployee();
  11. @Query(value = " From Employee e where e.fullName=:name")
  12. public <List>Employee getEmployeeByName(@Param("name") String name);
  13. }

字符串
下面是我的控制器类

  1. @GetMapping("/main")
  2. public String main(@ModelAttribute Employee employee, ModelMap model, HttpSession session) {
  3. List<Employee> allEmployeeQuery = this.empservice.getAllEmployeeQuery();
  4. allEmployeeQuery.forEach(a->System.out.println(a));
  5. return "main";
  6. }


我想使用@Query()annotation获取allEmploy的列表,但它抛出了一个异常。

  1. [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
  2. 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')
  3. at com.employee.service.EmpService.getAllEmployeeQuery(EmpService.java:22) ~[classes/:na]
  4. at com.employee.MainController.main(MainController.java:37) ~[classes/:na]


Sping Boot 和Hibernate

q7solyqu

q7solyqu1#

你应该提到哪些字段或字段需要作为结果。看起来你只有ClassCastException与第二个查询,因为你没有提到你需要在结果中的细节,但在查询中设置<List>Employee返回类型。
用这个更新你的查询并尝试。它可能解决你的ClassCastException问题。

  1. @Query(value = "SELECT e FROM Employee e WHERE e.fullName = :name")
  2. public List<Employee> getEmployeeByName(@Param("name") String name);

字符串

p8h8hvxi

p8h8hvxi2#

除了@Mark Rotteveel在关于List<Employee>而不是<List>Employee的评论中所说的之外,请记住,因为您在项目中使用了spring-boot-starter-data-jpa依赖项,所以您甚至不需要使用@Query进行简单的查询。
您可以在UserRepository中定义以下单行代码,Spring Data JPA将自动创建查询:

  1. List<Employee> findAllByName(String name);

字符串
只要你在UserRepository中实现了CrudRepository或JpaRepository,你就可以免费获得一大堆基本的CRUD操作查询。所以在你的仓库之外,你可以做:

  1. List<Employee> employees = userRepository.findAll();


此外,它是挑剔的,但UserRepository绝对应该被重命名为BaseRepository。

相关问题