私は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)]
は、私はすでに
のようなものを使用する必要がありますどちらか休止中のストア・プロシージャ/ –