@leandro16 escreveu:
Estou com problemas ao utilizar uma função do postgres.
Utilizo JPA e escrevo as consultas com Querydsl
Segue códigoNumberPath<Long> codigoEmpresa = QueryDSLUtil.createNumber(agendamentoBonoDTO.codigoEmpresa); NumberPath<Long> codigoFornecedorNota = QueryDSLUtil.createNumber(agendamentoBonoDTO.codigoFornecedorNota); NumberPath<Long> codigoFornecedorPedido = QueryDSLUtil.createNumber(agendamentoBonoDTO.codigoFornecedorPedido); StringPath nomeFornecedorNota = QueryDSLUtil.createString(agendamentoBonoDTO.nomeFornecedorNota); StringPath nomeFornecedorPedido = QueryDSLUtil.createString(agendamentoBonoDTO.nomeFornecedorPedido); NumberPath<Long> numeroBono = QueryDSLUtil.createNumber(agendamentoBonoDTO.numeroBono); NumberPath<Long> numeroDoca = QueryDSLUtil.createNumber(agendamentoBonoDTO.numeroDoca); NumberPath<Long> numeroNota = QueryDSLUtil.createNumber(agendamentoBonoDTO.numeroNota); StringPath numeroPedido = QueryDSLUtil.createString(agendamentoBonoDTO.numeroPedido); NumberPath<Long> quantidadeItens = QueryDSLUtil.createNumber(agendamentoBonoDTO.quantidadeItens); NumberPath<Long> codigoConferente = QueryDSLUtil.createNumber(agendamentoBonoDTO.codigoConferente); StringPath nomeConferente = QueryDSLUtil.createString(agendamentoBonoDTO.nomeConferente); DatePath<Date> dataReferencia = createDate(Date.class, agendamentoBonoDTO.dataReferencia); DateTimePath<Date> horaInicio = createDateTime(Date.class, agendamentoBonoDTO.horaInicio); DateTimePath<Date> horaTermino = createDateTime(Date.class, agendamentoBonoDTO.horaTermino); StringPath nomeMotorista = QueryDSLUtil.createString(agendamentoBonoDTO.nomeMotorista); StringPath nomeTransportadora = QueryDSLUtil.createString(agendamentoBonoDTO.nomeTransportadora); StringPath numeroPlaca = QueryDSLUtil.createString(agendamentoBonoDTO.numeroPlaca); NumberPath<Long> docaStatus = QueryDSLUtil.createNumber(agendamentoBonoDTO.docaStatus); PathBuilder<String> aliasExterno = new PathBuilder<String>(String.class, "pagamentos"); NumberPath<Long> count = QueryDSLUtil.createNumber(new StaticType<Long>(Long.class, "count")); NumberPath<Long> numeroBonoSub = QueryDSLUtil.createNumber(new StaticType<Long>(Long.class, "numeroBonoSub")); NumberPath<Long> codigoEmpresaSub = QueryDSLUtil.createNumber(new StaticType<Long>(Long.class, "codigoEmpresaSub")); QItensAgendamentoBonoPK itensAgendamentoBonoPK = new QItensAgendamentoBonoPK(itensAgendamentoBono.getMetadata().getName()); QAgendamentoBonoPK agendamentoBonoPK = new QAgendamentoBonoPK(agendamentoBono.getMetadata().getName()); QTransacionador fornecedorPedido = new QTransacionador("fornecedorPedido"); QTransacionador fornecedorNota = new QTransacionador("fornecedorNota"); JPASubQuery subQuery = new JPASubQuery().from(itensAgendamentoBono).innerJoin(agendamentoBono) .on(itensAgendamentoBonoPK.codigoEmpresa.eq(agendamentoBonoPK.codigoEmpresa) .and(itensAgendamentoBonoPK.numeroBono.eq(agendamentoBonoPK.numeroBono))) .leftJoin(pedido) .on(pedido.codigoEmpresa.eq(itensAgendamentoBonoPK.codigoEmpresa) .and(pedido.numeroPedido.eq(itensAgendamentoBonoPK.codigoSequencial))) .groupBy(itensAgendamentoBonoPK.codigoEmpresa, itensAgendamentoBonoPK.numeroBono); StringExpression agrupamento = QueryDSLUtil.concatGroup(pedido.numeroPedido.stringValue(), ","); JPASQLQuery query = sqlFrom().leftJoin(fornecedorPedido).on(agendamentoBono.fornecedorPedido.eq(fornecedorPedido.id)).leftJoin(usuario) .on(agendamentoBono.codigoConferente.eq(usuario.id)).innerJoin(transacionador) .on(agendamentoBonoPK.codigoEmpresa.eq(transacionador.id)).leftJoin(fornecedorNota) .on(agendamentoBono.fornecedorNota.eq(fornecedorNota.id)) .leftJoin(subQuery.list(itensAgendamentoBonoPK.codigoProduto.countDistinct().as(count), itensAgendamentoBonoPK.codigoEmpresa.as(codigoEmpresaSub), itensAgendamentoBonoPK.numeroBono.as(numeroBonoSub), agrupamento.as(numeroPedido)), aliasExterno) .on(agendamentoBonoPK.codigoEmpresa.eq(codigoEmpresaSub).and(agendamentoBonoPK.numeroBono.eq(numeroBonoSub))) .where(agendamentoBonoPK.codigoEmpresa.eq(empresa)); return QueryDSLUtil.listOf(AgendamentoBonoDTO.class, query.list(agendamentoBonoPK.codigoEmpresa.as(codigoEmpresa), agendamentoBono.numeroDoca.as(numeroDoca), agendamentoBonoPK.numeroBono.as(numeroBono), agendamentoBono.numeroNota.as(numeroNota), count.as(quantidadeItens), agendamentoBono.dataCadastro.as(dataReferencia), agendamentoBono.horaInicio.as(horaInicio), agendamentoBono.horaFim.as(horaTermino), agendamentoBono.numeroPlaca.as(numeroPlaca), transacionador.razaoSocial.as(nomeTransportadora), agendamentoBono.nomeMotorista.as(nomeMotorista), fornecedorPedido.razaoSocial.as(nomeFornecedorPedido), agendamentoBono.fornecedorPedido.as(codigoFornecedorPedido), agendamentoBono.fornecedorNota.as(codigoFornecedorNota), fornecedorNota.razaoSocial.as(nomeFornecedorNota), agendamentoBono.codigoConferente.as(codigoConferente), usuario.nome.as(nomeConferente), numeroPedido));
O problema é o numero do pedido uso uma função de agregação.
StringExpression agrupamento = QueryDSLUtil.concatGroup(pedido.numeroPedido.stringValue(), ","); public static StringExpression concatGroup(Expression<?> expr, String agrupador) { return StringTemplate.create("string_agg({0}, '{1s}')", expr, agrupador); }
A consulta retorna porém com este valor em branco.
A mesma consulta executada no banco retorna dados na coluna numeroPedido
Mensagens: 1
Participantes: 1