【发布时间】:2017-11-08 04:22:12
【问题描述】:
我有一个简单的 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
*/
}
【问题讨论】:
-
这听起来像你有冲突的依赖版本。发布您的 POM/构建文件
-
看起来不像 EmployeeDTO 类可以编译。
-
@EvanJones 我的错。修复类
-
@chrylis 实体和存储库位于不同的模块中。我已经发布了两者的pom
-
将两者分开是非常罕见的做法。我注意到您正在使用明显过时的依赖项;您不使用 Spring BOM(或者更好的是 Boot)是否有原因?
标签: java spring hibernate spring-data spring-data-jpa