Java 当投影到类时,带有@Query的投影无法按预期工作

Java 当投影到类时,带有@Query的投影无法按预期工作,java,spring,hibernate,spring-data-jpa,jpql,Java,Spring,Hibernate,Spring Data Jpa,Jpql,当投影到一个接口时,所有的东西都像预期的那样工作,字段被正确地映射。当我尝试用兼容的构造函数投射到一个类上时,一切都很好。当我使用@Query注释时,会出现以下异常: org.springframework.core.convert.ConverterNotFoundException:未找到能够从类型[java.util.HashMap]转换为类型[com.example.PersonSummary]的转换器 参见示例项目: 请参阅Spring数据错误:由于Spring数据错误尚未解决,您应该

当投影到一个接口时,所有的东西都像预期的那样工作,字段被正确地映射。当我尝试用兼容的构造函数投射到一个类上时,一切都很好。当我使用@Query注释时,会出现以下异常:

org.springframework.core.convert.ConverterNotFoundException:未找到能够从类型[java.util.HashMap]转换为类型[com.example.PersonSummary]的转换器

参见示例项目:


请参阅Spring数据错误:

由于Spring数据错误尚未解决,您应该能够通过在查询声明中使用构造函数表达式来解决此问题,即

@Query("select new com.example.PersonSummary(name, age) …")

您可以通过创建接受HashMap并调用SpringBean映射器的构造函数来强制spring投影:

public PersonSummary(HashMap<?, ?> resultMap) {
    BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(this);
    wrapper.setPropertyValues(resultMap);
}

我认为我们这样做首先是为了避免使用本机查询。你需要使用它有什么原因吗?您可以这样做,它应该可以正常工作:从LeftTable lt中选择new com.example.domain.MyModellt,obj1,obj2在obj1.leftRef=lt上左连接obj1类obj1,在obj2.leftRef=lt上左连接obj2类obj2,其中l.id=:id。
public PersonSummary(HashMap<?, ?> resultMap) {
    BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(this);
    wrapper.setPropertyValues(resultMap);
}
@Query("SELECT p.firstname as \"firstName\" from person p where ....", nativeQuery = true)