有没有办法转换春天数据存储库返回的对象?

use*_*123 4 jpa spring-data

现在我有一个实体对象和一个DTO.当我做一个简单的例子时,存储库返回一个对象数组列表:findById().有没有办法轻松地将返回类型映射为自定义DTO对象而不是始终返回实体对象?

示例如下:

@Query("Select f.id, f.name from Food f where f.id = :id")
public List<Object[]> findById(@Param("id") String id);
Run Code Online (Sandbox Code Playgroud)

我的DTO对象如下:

FoodDto{
    private String id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

现在我只能获得存储库以返回List <Object []>类型.

Koi*_*oer 20

试试这个.

@Query("Select new package.FoodDto(f.id, f.name) from Food f where f.id = :id")
public List<FoodDto> findById(@Param("id") String id);
Run Code Online (Sandbox Code Playgroud)

假设类FoodDto在包中,如果不是,则需要设置完整的包.

另外我假设FoodDto有一个匹配的构造函数

public FoodDto(int id, String name){
 //Variable assignation
}
Run Code Online (Sandbox Code Playgroud)

我从未尝试过spring-jpa,但是在JPQL中工作,所以我认为它可以工作XD