Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Função de Agregação JPA Querydsl

$
0
0

@leandro16 escreveu:

Estou com problemas ao utilizar uma função do postgres.
Utilizo JPA e escrevo as consultas com Querydsl
Segue código

NumberPath<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

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>