没有找到能够从 AbstractJPAQuery 转换为 DTO 的转换器

Posted

技术标签:

【中文标题】没有找到能够从 AbstractJPAQuery 转换为 DTO 的转换器【英文标题】:no converter found capable of converting from AbstractJPAQuery to DTO 【发布时间】:2021-12-05 12:09:51 【问题描述】:

谁能告诉我如何在 JPA 中使用下面的本机查询?现在我收到错误消息,因为找不到转换器。

在 DB(MYSQL) 中给出正确响应的 SQL 查询

SELECT SUM(CASE WHEN Status = 'PENDING' THEN 1 ELSE 0 END) AS `pendingRequest`,
       SUM(CASE WHEN Status = 'ACTIVE' or Status ='READY' THEN 1 ELSE 0 END) AS `approvedRequest`,
       SUM(CASE WHEN Status = 'FAILED' THEN 1 ELSE 0 END) AS `rejectedRequest`,
      SUM(CASE WHEN Status = 'ACTIVE' or Status ='READY' or Status ='PENDING' or Status ='FAILED' THEN 1 ELSE 0 END) as totalRequest FROM fiu_consent_db.consent_request;

我在 JPA 存储库中使用过的查询

@Query(value = "SELECT SUM(CASE WHEN Status = 'PENDING' THEN 1 ELSE 0 END) AS `pendingRequest`,\n" +
        "       SUM(CASE WHEN Status = 'ACTIVE' or Status ='READY' THEN 1 ELSE 0 END) AS `approvedRequest`,\n" +
        "       SUM(CASE WHEN Status = 'FAILED' THEN 1 ELSE 0 END) AS `rejectedRequest`,\n" +
        "       SUM(CASE WHEN Status = 'ACTIVE' or Status ='READY' or Status ='PENDING' or Status ='FAILED' THEN 1 ELSE 0 END) AS `totalRequest` FROM fiu_consent_db.consent_request",nativeQuery = true)
ConsentRequestCount getAllConsentRequestCount();

我创建的 DTO

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConsentRequestCount 

    private long pendingRequest;
    private long approvedRequest;
    private long rejectedRequest;
    private long totalRequest;



我为这 4 个文件创建了一个单独的 DTO,并将数据类型设为 long(也尝试使用 int),但它无法映射。

谁能给我建议?

【问题讨论】:

您好,请添加您的@Query注释的查询方法 还添加完整的代码,而不仅仅是部分,例如 DTO 类,不仅完整地发布它的字段,例如你是否为它创建了 getter/setter? @pleft 添加了方法 还有错误堆栈跟踪,请尝试提供尽可能多的信息,以便其他成员能够帮助您。 尝试添加但遇到一些格式问题,对于 getter 和 setter,我使用了 lombok 【参考方案1】:

根据this,基于类的 DTO 投影不适用于本机查询。您可以通过将 DTO 类更改为接口来切换到基于接口的 DTO 投影

所以这个 DTO:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConsentRequestCount 

    private long pendingRequest;
    private long approvedRequest;
    private long rejectedRequest;
    private long totalRequest;


改成接口:

public interface ConsentRequestCount 

    long getPendingRequest();
    long getApprovedRequest();
    long getRejectedRequest();
    long getTotalRequest();

【讨论】:

以上是关于没有找到能够从 AbstractJPAQuery 转换为 DTO 的转换器的主要内容,如果未能解决你的问题,请参考以下文章

没有找到能够从类型 [java.lang.String] 转换为类型 [@Autowired @ManyToOne @JoinColumn com.papertrue.country.Country]

没有找到能够从 [java.lang.String] 类型转换为 [org.springframework.data.solr.core.geo.Point] 类型的转换器

Confluence 6 找到未使用的空间

Confluence 6 找到未使用的空间

了解这些C++常用库,或许能够帮你找到合适的个人项目!

IntelliJ 终端 - 已更新且不再能够从终端运行脚本