我有一个简单的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
*/
}
答案 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);
}