Spring Data JPA 和 Projection 为 TupleConverter 获取 ConverterNotFoundException

K.N*_*las 2 java spring spring-data spring-data-jpa

有没有办法TupleConverter在 Spring Data 中编写和注册转换器?当我在 Repository 接口中有一个 @Query 注释并要求投影时,我收到了这个异常。

界面:

public interface ProjectRepository extends JpaRepository<Project, Integer> {
    @Query("select p.projectId, p.projectName, p.techstack from Project p")
    public List<ProjectItem> findAllForTest();
}
Run Code Online (Sandbox Code Playgroud)

DTO:

public class ProjectItem {
    private final Integer projectId;
    private final String projectName;
    private final String techstack;
    @JsonCreator
    public ProjectItem(
        @JsonProperty("projectId") Integer projectId, 
        @JsonProperty("projectName") String projectName, 
        @JsonProperty("techstack") String techstack
    ) {
        this.projectId = projectId;
        this.projectName = projectName;
        this.techstack = techstack;
    }
    public Integer getProjectId() {
        return projectId;
    }
    public String getProjectName() {
        return projectName;
    }
    public String getTechstack() {
        return techstack;
    }
}
Run Code Online (Sandbox Code Playgroud)

例外

没有发现转换器能够从类型 [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] 转换为类型 [project.item.ProjectItem]] 的根本原因

Rob*_*roj 6

使用JPQL 构造函数表达式

@Query("select new com.company.path.to.ProjectItem(p.projectId, p.projectName, p.techstack) from Project p")
Run Code Online (Sandbox Code Playgroud)