Java 将查询结果映射到DTO的最佳方法
我想进行一个复杂的查询,并将结果映射到DTO中。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
@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();
...
}