9
respostas

SELECT DEPOIS DE UM UPDATE

Bom dia , em meu sistema eu tenho uma @procedure e a mesma atualiza um registro no bd e o mesmo é persistido, porém quando eu faço um select buscando o registro atualizado , mas o mesmo não vem atualizado.

9 respostas

Olá.

Como está essa procedure e esse select? Em que momentos são acionados? Tenta passar o código deles aqui.

PROCEDURE

   public void gerarCodigoDeBarrasELinhaDigitavel(Boleto boleto){

      boletoRepository.atualizarCodigoBarrasELinha(boleto.getFilial().getCodigo(),boleto.getCobranca().getCodigo(),boleto.getBanco().getCodigo(),boleto.getNumTransvenda(), boleto.getNumdiasprazoprotesto(),String.valueOf(boleto.getPrestacao()),"N","N","N",0);
      boletoRepository.flush();

     }

CONSULTA

 public Boleto consultarNovoBoleto(int numtransvenda , int prest){
     Boleto boleto = new Boleto();
     Query q = entity.createNativeQuery("SELECT * FROM  PCPREST  WHERE NUMTRANSVENDA= :numtrans AND PREST = :prest",Boleto.class).setParameter("numtrans",numtransvenda).setParameter("prest", prest);
     boleto =(Boleto) q.getSingleResult();
     return boleto;
     }

E A CHAMADA DOS MÉTODOS

 atualizarBoletoAnterior(boleto.getNumTransvenda(), query);
        System.out.println("CRIA BOLETO");
        criarNovoBoleto(boletinho, valorAntigo);
        System.out.println("DESDOBRA BOLETO");
        desdobrarBoleto(boleto);
        gerarCodigoDeBarrasELinhaDigitavel(boletinho);
        ConfigFinansi config = dao.getConfiguracoes();
        System.out.println("FILIAL BOLETO");
        if (boleto.getFilial2() != null) {
            filial = getFilia(boleto.getFilial2());
        } else {
            filial = boleto.getFilial();
        }
        System.out.println("GERAR BOLETO");


        return new Boleto().validarBoleto(consultarNovoBoleto(boletinho.getNumTransvenda(),boletinho.getPrestacao()), novoValor, config, filial);

o gera codigo de barras é uma procedure , mas parece que a consulta está sendo chamada antes dela terminar . como proceder?

Se você fizer esse SELECT do método de consulta direto no banco depois de chamar o método de atualizar, retorna o registro atualizado? Retorna mais de um registro?

ele retorna o registro mas não atualizado.

Então o problema deve estar nesse método atualizarCodigoBarrasELinha. Manda aqui o código dele. Preciso saber como o update está sendo feito.

É uma procedure do sql , ele atualiza o registro de boa , eu consulto via NAvigator e o mesmo foi alterado , mas na aplicação ele não vem alterado acho que a consulta está ocorrendo simultaneamente á execução da procedure.

Os valores numtrans e prest do boleto enviado pra proc são alterados? Porque na consulta você passa o objeto boletinho, que não foi alterado, ele permanece o mesmo. Debugando com break point você viu se ele passa os valores certos para o método de consulta?

ele passa os valores corretos o problema é no controle de transações

Só se não tá commitando a transaction a tempo. Quando você roda esses métodos, por mais que na tela não venha atualizado, no banco o registro fica atualizado? Não digo rodar a proc na mão, digo executando esse bloco que você enviou.