【发布时间】:2020-07-20 20:11:44
【问题描述】:
我在下面有一个复杂的查询,但我需要将此 DeploymentD 投影到我可以使用哪种方法进行投影?此查询位于扩展 JpaRepository 的接口类中。稍后在另一个课程中,我需要在我的代码中使用结果列表。
基本上我需要将我的本机查询映射到 dto,所以对于像我这样的查询我该怎么做?我进行了研究,但例如 JPQL 查询使用简单的本机查询。
@Query(value = "SELECT a.name, a.created_at, a.updated_at, d.version, a.image, d.id, d.app_id\n" +
"FROM applications a\n" +
"LEFT JOIN deployments d ON d.app_id = a.id\n" +
"WHERE d.app_id IS NULL\n" +
"union\n" +
"select a.name, d.created_at, d.updated_at, d.version, a.image, d.id, d.app_id from applications a\n" +
"inner join deployments d on d.app_id = a.id\n" +
"where d.updated_at = (\n" +
"select max(d1.updated_at) from deployments d1 where d1.app_id = a.id)\n" +
"ORDER BY name", nativeQuery = true)
List<Deployment> findLatestDeployments();
我不能像 List findLatestDeployments() 那样直接使用它;它给出了这样的错误:
{"timestamp":1595277133888,"message":"No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [com.gg.applications.model.DeploymentDto]"
【问题讨论】:
-
查询将在方法被调用时执行(假设一切都正确连接)所以不确定我可以使用哪种方法进行投影是什么意思。
-
我需要在我的项目中使用部署的 dto 而不是部署本身。当我尝试将最后一部分转换为 List
findLatestDeployments();它给出了一个错误,所以我需要将结果直接映射到 DTO,但是例如 JPQL 查询对我不起作用,因为我的查询很复杂,我不知道该怎么做 -
我更新了我的问题,我希望我很清楚:(
标签: java spring-boot jpa spring-data-jpa dto