使用@Query()返回Employee列表时出现异常

问题描述 投票:0回答:2

我正在使用 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。

java spring-boot hibernate nhibernate-mapping
2个回答
0
投票

您应该提及您需要哪个字段或字段作为结果。看起来您只有

ClassCastException
与第二个查询,因为您没有提及结果中需要哪些详细信息,而是在查询中设置
<List>Employee
返回类型。

用此更新您的查询并尝试。它可能会解决你的问题

ClassCastException

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

0
投票

除了 @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。

© www.soinside.com 2019 - 2024. All rights reserved.