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



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

错误:

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.TableReportCapitoloReventivo]

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;
}
}

您有两个选项

  1. 使TableReportCapitoloPreventivo.class成为一个接口,其中为每个字段公开getter方法。不幸的是,当返回的对象由类表示时,JPA不能自动使用转换器。

  2. 对实体类SottoCapitolo.class使用@NamedNativeQuery@SqlResultSetMapping来定义返回结果应如何映射到TableReportCapitoloPreventivo.class。如果你沿着这条路走,那么这个之前的SO答案也可以指导你如何做

在这里查看另一个类似的教程。

最新更新