Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将结果集转换为spring boot 2中的模型_Java_Spring_Spring Boot_Jpa - Fatal编程技术网

Java 将结果集转换为spring boot 2中的模型

Java 将结果集转换为spring boot 2中的模型,java,spring,spring-boot,jpa,Java,Spring,Spring Boot,Jpa,我正试图使用指定的查询来使用@query从数据库中获取数据,但出现了此错误 org.springframework.core.convert.ConverterNotFoundException:未找到能够从类型[org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap]转换为类型[org.closure.gcp.models.UserQueryModel]]的转换器,

我正试图使用指定的查询来使用
@query
从数据库中获取数据,但出现了此错误

org.springframework.core.convert.ConverterNotFoundException:未找到能够从类型[org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap]转换为类型[org.closure.gcp.models.UserQueryModel]]的转换器,且没有根本原因

如何将此查询的结果转换为我的模型

我的存储库中的查询方法

@Query(value = "select u.name as name,c.college_name as college_name from users u inner join college c ON u.college_id = c.id GROUP BY name", nativeQuery = true)
   List<UserQueryModel> usersWithCollege(); 
数据库中的结果表如下所示

+------+--------------+
| name | college_name |
+------+--------------+
| cpp  | CAE-DU       |
| cs   | IT-DU        |
| java | IT-DU        |
+------+--------------+

编辑: 首先在JPQL中转换您的请求,它可能类似于:

select u.name, c.college_name from User u inner join College c ON u.college_id = c.id GROUP BY u.name
然后构造新对象,您可以(在UserQueryModel中添加所有参数构造函数后):

@Query(value=“从用户u内部选择新的.package.UserQueryModel(u.name,c.college\u name)加入大学c ON u.college\u id=c.id按u.name分组”)
列出用户swithcollege();

如果您想使用本机查询,那么您可以这样做

包含对象列表的隐蔽返回类型如下所示

@Query(value = "select u.name as name,c.college_name as college_name from users u inner join college c ON u.college_id = c.id GROUP BY name", nativeQuery = true)
List<Object> usersWithCollege(); 
@Query(value=“选择u.name作为名称,c.college\u name作为学院名称,从用户u内部加入大学c ON u.college\u id=c.id按名称分组”,nativeQuery=true)
列出用户swithcollege();
然后,在您可以在模型中创建构造函数并将对象列表转换为Pojo之后

public List<UserQueryModel> convertToModel(List<Object> object) {
    List<UserQueryModel> list = new ArrayList<UserQueryModel>();        
    for(final Object o : object) {
        Object[] obj = (Object[]) o;
        list.add(new UserQueryModel(obj[0].toString(), obj[1].toString()));
    }
    return list;
}
公共列表转换模型(列表对象){
列表=新的ArrayList();
用于(最终对象o:对象){
Object[]obj=(Object[])o;
添加(新的UserQueryModel(obj[0].toString(),obj[1].toString());
}
退货清单;
}
有一个正确的答案,我找到了这个方法

回购法

@Query(value = "select u.name as name,c.college_name as college_name from users u inner join college c ON u.college_id = c.id GROUP BY name", nativeQuery = true)
    List<List<String>> usersWithCollege();
@Query(value=“选择u.name作为名称,c.college\u name作为学院名称,从用户u内部加入大学c ON u.college\u id=c.id按名称分组”,nativeQuery=true)
列出用户swithcollege();
服务方式

public List<UserQueryModel> queryUsersCollege()
    {
        List<List<String>> list = userRepo.usersWithCollege();
        return list.stream().map((mapper)->{
            return new UserQueryModel(mapper.get(0),mapper.get(1));
        }).toList();
    }
公共列表查询服务集合()
{
List List=userRepo.usersWithCollege();
返回list.stream().map((映射器)->{
返回新的UserQueryModel(mapper.get(0),mapper.get(1));
}).toList();
}

但我仍然认为它应该更好

这只适用于JPQL,而不是普通SQL。嗯,你是对的,所以也许你必须首先将请求转换为JPQL(不是本机查询)。我觉得没什么大不了的。
@Query(value = "select u.name as name,c.college_name as college_name from users u inner join college c ON u.college_id = c.id GROUP BY name", nativeQuery = true)
    List<List<String>> usersWithCollege();
public List<UserQueryModel> queryUsersCollege()
    {
        List<List<String>> list = userRepo.usersWithCollege();
        return list.stream().map((mapper)->{
            return new UserQueryModel(mapper.get(0),mapper.get(1));
        }).toList();
    }