Home > OS >  Spring boot No converter found capable of converting from type
Spring boot No converter found capable of converting from type

Time:04-20

I have to run a native query to retrieve the data to be inserted in a model other than the JpaRepository in which it is declared, when I execute the function loadValoriPreventivoUnicaPercumento I have the following error. How can I fix this? and what is it due to?

Error:

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

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

Java Code:

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;

    }
}

CodePudding user response:

You have 2 options

  1. Make TableReportCapitoloPreventivo.class an interface where a getter method is exposed for each field. Unfortunately the converter can not be automatically used by JPA when the returned object is represented by a class.

  2. Use @NamedNativeQuery with @SqlResultSetMapping to your entity class SottoCapitolo.class to define how the return result should be mapped into an TableReportCapitoloPreventivo.class. If you follow this road then this previous SO answer could also guide you on how to do it.

Check another similar tutorial here.

  • Related