Spring boot 找不到能够从类型转换的转换器

Spring boot No converter found capable of converting from type

我必须 运行 一个本机查询来检索要插入到模型中的数据,而不是声明它的 JpaRepository,当我执行函数 loadValoriPreventivoUnicaPercumento 时,出现以下错误。我怎样才能解决这个问题?这是因为什么?

错误:

Errore: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type 

[org.springframework.data.jpa.repository.query .AbstractJpaQuery$TupleConverter$TupleBackedMap] 输入 [com.reportserver.report.model.TableReportCapitoloPreventivo]

Java代码:

public interface SottoCapitoloRepository extends JpaRepository<SottoCapitolo, Integer> {
    //Permette il caricamento dei sotto capitolo
    @Query("FROM SottoCapitolo where IdCapitolo=:IdCapitolo")
    List<SottoCapitolo> load(@Param("IdCapitolo") int IdCapitolo);

    //Caricamento valori stampa sotto capitoli report unica percentuale
    @Query(nativeQuery = true, value = "DECLARE @T AS table( Descrizione varchar(5000), NumeroCapitolo varchar(100), SottoCapitolo1 varchar(5000), SottoCapitolo2 varchar(5000), SottoCapitolo3 varchar(5000), Totale money, DescrizioneEstesa varchar(5000), Images Image, CostoUnitario money, Quantita money, DescrizioneDis varchar(5000),Tipologia varchar(300),PrezzoRiservato money,UM varchar(50)); INSERT INTO @T SELECT Capitolo.Descrizione, Capitolo.NumeroCapitolo,SottoCapitolo.SottoCapitolo1,SottoCapitolo.SottoCapitolo2,SottoCapitolo.SottoCapitolo3, (ROUND(((((ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * PercentualeUtile) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2)) / 100) * PercentualeMargine) + (ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * PercentualeUtile) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2))), 2)) * SottoCapitolo.Quantita as Totale ,SottoCapitolo.DescrizioneEstesa, SottoCapitolo.Images, ROUND(((((ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * PercentualeUtile) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2)) / 100) * PercentualeMargine) + (ROUND((((((((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario) / 100) * PercentualeUtile) + (((SottoCapitolo.CostoUnitario / 100) * PercentualeSpeseGenerali) + SottoCapitolo.CostoUnitario)) * 1), 2))), 2) as CostoUnitario,SottoCapitolo.Quantita  , CASE when Tipologia='Prezzo' then SottoCapitolo.Descrizione else ''+SottoCapitolo.Codice+ '     ' +SottoCapitolo.Descrizione end as DescrizioneDis,Capitolo.Tipologia,Capitolo.PrezzoRiservato,SottoCapitolo.UnitaMisura as UM FROM Capitolo INNER JOIN SottoCapitolo ON SottoCapitolo.IdCapitolo = Capitolo.IdCapitolo  INNER JOIN Preventivo ON Preventivo.IdPreventivo = Capitolo.IdPreventivo  where Preventivo.IdPreventivo =:IdPreventivo ;SELECT CASE WHEN ROW_NUMBER() OVER(PARTITION BY a.Descrizione ORDER BY a.Descrizione) = 1 THEN a.Descrizione ELSE '' END AS Descrizione, Descrizione as Desc2,a.NumeroCapitolo, a.SottoCapitolo1, a.SottoCapitolo2, a.SottoCapitolo3, a.DescrizioneDis, a.CostoUnitario, a.Quantita, a.Totale AS TotaleCap, a.DescrizioneEstesa, a.Images,a.Tipologia,a.PrezzoRiservato,a.UM FROM(SELECT 1 AS d, ROW_NUMBER() OVER(PARTITION BY Descrizione ORDER BY Descrizione) AS r, Descrizione, NumeroCapitolo, SottoCapitolo1, SottoCapitolo2, SottoCapitolo3, Totale, DescrizioneDis, Images, CostoUnitario, Quantita, DescrizioneEstesa,Tipologia,PrezzoRiservato,UM FROM @T  UNION ALL SELECT 2, 0, Descrizione, NumeroCapitolo, '', '', '', SUM(Totale), '', '', '', '','',Tipologia,PrezzoRiservato,'' FROM @T GROUP BY Descrizione,Tipologia,PrezzoRiservato,NumeroCapitolo) AS a ORDER BY a.Descrizione, a.d ")
    List<TableReportCapitoloPreventivo> loadValoriPreventivoUnicaPercentuale(@Param("IdPreventivo") int IdPreventivo);
}


public class TableReportCapitoloPreventivo implements Serializable {
    public String Descrizione;
    public String Desc2;
    public Integer NumeroCapitolo;
    public String SottoCapitolo1;
    public String SottoCapitolo2;
    public String SottoCapitolo3;
    public String DescrizioneDis;
    public Double CostoUnitario;
    public Double Quantita;
    public Double TotaleCap;
    public String DescrizioneEstesa;
    public String Tipologia;
    public String UM;
    public double PrezzoRiservato;
    public byte[] Imgaes;

    public TableReportCapitoloPreventivo(String Descrizione, String Desc2, int NumeroCapitolo, String SottoCapitolo1, String SottoCapitolo2, String SottoCapitolo3, String DescrizioneDis, double CostoUnitario, double Quantita, double TotaleCap, String DescrizioneEstesa, String tipologia, String UM, double PrezzoRiservato, byte[] Images, String Tipologia) {
        this.Descrizione = Descrizione;
        this.Desc2 = Desc2;
        this.NumeroCapitolo = NumeroCapitolo;
        this.SottoCapitolo1 = SottoCapitolo1;
        this.SottoCapitolo2 = SottoCapitolo2;
        this.SottoCapitolo3 = SottoCapitolo3;
        this.DescrizioneDis = DescrizioneDis;
        this.CostoUnitario = CostoUnitario;
        this.Quantita = Quantita;
        this.TotaleCap = TotaleCap;
        this.DescrizioneEstesa = DescrizioneEstesa;
        this.Tipologia = Tipologia;
        this.UM = UM;
        this.PrezzoRiservato = PrezzoRiservato;
        this.Imgaes = Images;

    }
}

您有 2 个选择

  1. 使 TableReportCapitoloPreventivo.class 成为一个接口,其中为每个字段公开一个 getter 方法。不幸的是,当 returned 对象由 class.

    表示时,JPA 无法自动使用转换器
  2. @NamedNativeQuery@SqlResultSetMapping 用于您的实体 class SottoCapitolo.class 以定义 return 结果应如何映射到TableReportCapitoloPreventivo.class。如果您遵循这条道路,那么 也可以指导您如何去做。

在此处检查另一个类似的 tutorial