2017-06-07 43 views
0

私はpostgres SQLのプロシージャを持っていますが、jpa hibernateを使用してコールしようとしていますが、エラーが発生しています。呼び出しプロシージャ/ファンクションJPA Hibernate

select * from myprocedure(2016, 3, 0, 0,0) 
AS f(descricao varchar, itens integer, quantidade bigint, valor numeric) 

ここでは、Javaで何をしようとしていますか。

StringBuilder sb = new StringBuilder(); 
      sb.append(" SELECT * "); 
      sb.append(" FROM myprocedure("); 
      sb.append(" :ano , "); 
      if (Util.isNotNull(mes)) { 
       sb.append(":mes , "); 
      } 
      sb.append(" :codNre , "); 
      sb.append(" :codMun , "); 
      sb.append(" 0) "); 
      sb.append(" AS f(descricao varchar, itens integer, quantidade bigint, valor numeric) "); 

      TypedQuery<Tuple> query = em.createQuery(sb.toString(), Tuple.class); 

      query.setParameter("ano", ano); 
      if (Util.isNotNull(mes)) { 
       query.setParameter("mes", mes); 
      } 
      query.setParameter("codNre", codNre); 
      query.setParameter("codMun", codMun); 

      List<ResumoDistribuicaoMerendaDTO> listaRetorno = new ArrayList<ResumoDistribuicaoMerendaDTO>(); 

      List<Tuple> results = query.getResultList(); 
      for (Tuple result : results) { 
       ResumoDistribuicaoMerendaDTO resumoMerenda = new ResumoDistribuicaoMerendaDTO(); 
       resumoMerenda.setDescricaoAlimento(result.get(0).toString()); 
       resumoMerenda.setItens(Integer.valueOf(result.get(1).toString())); 
       resumoMerenda 
         .setQuantidade(result.get(2) == null ? new Long(0) : Long.parseLong(result.get(2).toString())); 
       resumoMerenda.setValor(result.get(3) == null ? new BigDecimal(0) 
         : BigDecimal.valueOf(Double.parseDouble(result.get(3).toString()))); 

       listaRetorno.add(resumoMerenda); 
      } 

例外:

java.lang.IllegalArgumentExceptionが:org.hibernate.hql.internal.ast.QuerySyntaxException:予期しないトークン:*行1近く、カラム9 [(myprocedure SELECT * FROM:あの、:MES、:codNre、:codMun、0)quantidade BIGINT F(descricaoのvarchar型、整数をitens、勇気の数値AS)]

は、私はすでに

+0

のようなものを使用する必要がありますどちらか休止中のストア・プロシージャ/ –

答えて

0

\ = * Fためではなく、働いていないを交換してみてくださいcreateQuery()でPostgreSQLのSQLを使用することはできません。 createQueryコマンドは、データベースに定義されているmyprocedureを知らないJava Persistence Query Language(JPQL)のみを受け入れます。 https://www.mkyong.com/hibernate/how-to-call-:

あなたはこれを見てください(ドキュメントhereを確認してください)そのためem.createNativeQuery(...)を使用するかthis

関連する問題