Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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

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 将查询结果映射到DTO的最佳方法_Java_Spring_Jpa_Spring Data Jpa_Spring Data - Fatal编程技术网

Java 将查询结果映射到DTO的最佳方法

Java 将查询结果映射到DTO的最佳方法,java,spring,jpa,spring-data-jpa,spring-data,Java,Spring,Jpa,Spring Data Jpa,Spring Data,我想进行一个复杂的查询,并将结果映射到DTO中。DTO如下所示: @Value(staticConstructor = "of") public class TotalsDto { LocalDate date; long totals; long totalPerCategory; int categoryId; String categoryName; } 我的存储库接口是从JpaRepository扩展而来的。这会引发一个IllegalArgume

我想进行一个复杂的查询,并将结果映射到DTO中。DTO如下所示:

@Value(staticConstructor = "of")
public class TotalsDto {
    LocalDate date;
    long totals;
    long totalPerCategory;
    int categoryId;
    String categoryName;
}
我的存储库接口是从
JpaRepository
扩展而来的。这会引发一个
IllegalArgumentException:不是托管类型
,因为
TotalsDto
本身不是实体

存储库是:

@Repository
public interface TotalsRepository extends JpaRepository<TotalsDto, Integer> { 

    @Query(value = "SELECT ...", nativeQuery = true)
    List<TotalsDto> getTotals(params...);
}
1)使
TotalsDto
成为一个界面

2)创建getter:

public interface TotalsDto{

    long getTotals();
    int getCategoryId();
    ...

}
SpringDataJPA随后将自动创建/填充您的结果对象


有关主题的更多信息存储库
的第一个类型参数(或
JpaRepository
)必须是托管实体。因此,
JpaRepository
无效,因为
TotalsDto
不是托管实体。将
TotalsDto
更改为@MaciejKowalski建议的投影界面,然后将JPA实体作为第一个类型参数传递给
Repository
,例如,
Repository

仍然获得
而不是托管类型。我还将存储库父项更改为
org.springframework.data.repository.repository
,如您发送的链接中所述,但出现了相同的错误。您可以参考此活动:
public interface TotalsDto{

    long getTotals();
    int getCategoryId();
    ...

}