javaspringjparepository

Spring boot - JpaRepository<T1 , T2> "java.lang.IllegalArgumentException: At least 2 parameter(s) provided but only 1 parameter(s) present in query'"


I was doing a repository class in Spring Boot like this

public interface ordini_lista_prodottiRepository extends JpaRepository<ordini_lista_prodotti, String> {

    //SQL
    @SQLInsert(sql = "INSERT into ordini_lista_prodotti (lista_ordini_idord, lista_prodotti_codprod, prototype)\n" +
            "SELECT :idord, :codprod\n" +
            "FROM ordini_lista_prodotti \n" +
            "WHERE lista_ordini_idord = :idord AND lista_prodotti_codprod = :codprod\n" +
            "on conflict (lista_ordini_idord, lista_prodotti_codprod) DO UPDATE" +
            "SET prototype = :prototype;")
    List<ordini_lista_prodotti> prototype(@Param("idord") String idord, @Param("codprod") String codprod, @Param("prototype") String prototype, Pageable pageable);

}

I receive this error:

java.lang.IllegalArgumentException: At least 2 parameter(s) provided but only 1 parameter(s) present in query

I must achieve a kind of method like this, and I don't know what to do.

This kind of solutions give me the same error

public interface ordini_lista_prodottiRepository extends JpaRepository<ordini_lista_prodotti, String> {

    //SQL
    @SQLInsert(sql = "INSERT into ordiniListaProdotti (listaOrdiniIdord, listaProdottiCodprod, prototype)\n" +
            "SELECT :idord, :codprod, prototype\n" +
            "FROM ordiniListaProdotti \n" +
            "WHERE listaOrdiniIdord = :idord AND listaProdottiCodprod = :codprod\n" +
            "on conflict (listaOrdiniIdord, listaProdottiCodprod) DO UPDATE" +
            "SET prototype = :prototype;")
    List<ordini_lista_prodotti> prototype(@Param("idord") String idord, @Param("codprod") String codprod, @Param("prototype") String prototype, Pageable pageable);

}
public interface ordini_lista_prodottiRepository extends JpaRepository<ordini_lista_prodotti, String> {

    //SQL
    @SQLInsert(sql = "INSERT into ordiniListaProdotti (listaOrdiniIdord, listaProdottiCodprod, prototype) " +
            "SELECT :idord, :codprod, prototype " +
            "FROM ordiniListaProdotti  " +
            "WHERE listaOrdiniIdord = :idord AND listaProdottiCodprod = :codprod " +
            "on conflict (listaOrdiniIdord, listaProdottiCodprod) DO UPDATE " +
            "SET prototype = :prototype")
    List<ordini_lista_prodotti> prototype(@Param("idord") String idord, @Param("codprod") String codprod, @Param("prototype") String prototype, Pageable pageable);

}
public interface ordini_lista_prodottiRepository extends JpaRepository<ordini_lista_prodotti, String> {

    //SQL
    @SQLInsert(sql = "INSERT into ordiniListaProdotti (listaOrdiniIdord, listaProdottiCodprod, prototype) " +
            "SELECT * " +
            "FROM ordiniListaProdotti  " +
            "WHERE listaOrdiniIdord = :idord AND listaProdottiCodprod = :codprod " +
            "on conflict (listaOrdiniIdord, listaProdottiCodprod) DO UPDATE " +
            "SET prototype = :prototype")
    List<ordini_lista_prodotti> prototype(@Param("idord") String idord, @Param("codprod") String codprod, @Param("prototype") String prototype, Pageable pageable);

}

This also doesn't work:

//SQL
@SQLUpdate(sql = "UPDATE ordini_lista_prodotti SET prototype = :prototype WHERE listaOrdiniIdord = :idord AND listaProdottiCodprod = :codprod")
List<ordini_lista_prodotti> prototype(@Param("idord") String idord, @Param("codprod") String codprod, @Param("prototype") String prototype);

Solution

  • SOLVED

    @Repository
    public interface ordini_lista_prodottiRepository extends JpaRepository<ordini_lista_prodotti, String> {
    
        //SQL
        @Query(nativeQuery = true, value = "UPDATE ordini_lista_prodotti SET prototype = :prototype WHERE lista_ordini_idord = :idord AND lista_prodotti_codprod = :codprod RETURNING *")
        List<ordini_lista_prodotti> setPrototype(@Param("idord") String idord, @Param("codprod") String codprod, @Param("prototype") String prototype);
    
    }