Sprindg数据存储库无法返回DTO

时间:2017-11-08 04:22:13

标签: java spring hibernate spring-data spring-data-jpa

我有一个简单的spring JPA存储库,它有一个需要在DTO列表中返回结果的方法。

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

    @Query(value = "SELECT new com.project.jpa.entity.EmployeeDTO(e.name, r.roleName) FROM Employee e JOIN e.role r")
    List<EmployeeDTO> getEmployee_1();

    @Query("SELECT new EmployeeDTO(e.name, r.roleName) FROM Employee e JOIN e.role r")
    List<EmployeeDTO> getEmployee_2();

    @Query(value = "SELECT new EmployeeDTO(e.name, r.roleName) FROM Employee e JOIN e.role r")
    List<EmployeeDTO> getEmployee_3();

}

您在上面看到的三种方法是我尝试获得结果的三种变体。但是这三个都失败并抛出了以下错误。

Caused by: java.lang.ClassCastException: org.hibernate.hql.internal.ast.tree.SqlNode cannot be cast to org.hibernate.hql.internal.ast.tree.PathNode

我在这里做错了什么。

这是我的DTO

public class EmployeeDTO {

    private String name;
    private String roleName;

    public EmployeeDTO (String name, String roleName) {
        this.name = name;
        this.roleName = roleName;
    }

    /*
        Getters and setters
    */
}

1 个答案:

答案 0 :(得分:-1)

在创建存储库类时,需要传递具有DTO对象标识符的相同DTO对象

公共接口EmployeeRepository扩展了JpaRepository&lt; EmployeeDTO,Integer&gt; {

//如果您需要检索所有员工,请尝试以下

@Query("FROM EmployeeDTO e")
List<EmployeeDTO> getEmployee_1();

//如果您需要在特定条件下检索员工,请尝试以下

@Query("FROM EmployeeDTO e where e.roleName =:roleName")
List<EmployeeDTO> getEmployeeByRoleName(@Param("roleName") String roleName);

}