commit with @Transactional annotation in Spring

1

Good afternoon! I am new to java and Spring and am needing help in the code below. I need to commit every commit iteration, but it is only done at the end of the transaction, I created the persist method, thinking it would open a new transaction and commit, but nothing. Could someone tell me how to proceed? Thanks in advance.

@Override
@Transactional
public String enviarPedidos() {
    LOGGER.info("MassivoPedido :: enviarPedidos");

    final String[] listStatus = {Constante.UPLOAD_MASS_STATUS_AG_ENVIO, Constante.ENVIAR_MASS_PED_ERROR};
    final List<MassivoPedido> massivoPedidos = this.buscarPorStatus(listStatus);
    final List<MassivoPedidoParametro> massivoPedidoParametros = this.massivoPedidoParametroComponent.findAll();
    final Date agora = new Date();
    JSONObject retornoCriarPedidoJSONObject;
    for (MassivoPedido massivoPedido : massivoPedidos) {
        try {
            for(MassivoPedidoParametro massivoPedidoParametro : massivoPedidoParametros){
                try {
                    if (massivoPedidoParametro.getCnpjFornecedor().equalsIgnoreCase(massivoPedido.getCnpjFornecedor())) {
                        retornoCriarPedidoJSONObject = Util.buildJSONObject((this.fornecedorClient.criarPedido(massivoPedidoParametro, massivoPedido).toString().replace("Status","returnCode").replace("Message","returnMessage")));
                        LOGGER.info("MassivoPedido :: enviarPedidos - {}", retornoCriarPedidoJSONObject.toString());

                        if (retornoCriarPedidoJSONObject.getString("returnCode").equals("1") || retornoCriarPedidoJSONObject.getString("returnCode").equals("ERROR")) {
                            massivoPedido.setDatahoraReg(agora);
                            massivoPedido.setRetornoFornecedor(retornoCriarPedidoJSONObject.toString());

                            massivoPedido.setStatus(Constante.ENVIAR_MASS_PED_ERROR);

                            if (retornoCriarPedidoJSONObject.getString("returnMessage").equals("Duplicate PoNo")) {
                                massivoPedido.setStatus(Constante.ENVIAR_MASS_PED_SUCCESS);
                            }

                        } else {
                            massivoPedido.setStatus(Constante.ENVIAR_MASS_PED_SUCCESS);
                            massivoPedido.setDatahoraReg(agora);
                            massivoPedido.setRetornoFornecedor(retornoCriarPedidoJSONObject.toString());
                        }
                    }
                }
                catch (Exception e) {
                    massivoPedido.setStatus(Constante.ENVIAR_MASS_PED_ERROR);
                    massivoPedido.setDatahoraReg(agora);
                    massivoPedido.setRetornoFornecedor("Erro ao criar pedido " + massivoPedido.getIdPedido() + " no fornecedor " + massivoPedido.getCnpjFornecedor() + " " + e.toString());
                }

                this.persiste(massivoPedido);
            }
        } catch (Exception e) {
            LOGGER.error("Erro ao enviarPedidos - Massivo Pedido. Erro: {}", e.toString());
        }
    }
    return null;
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void persiste(MassivoPedido massivoPedido) {
    super.update(massivoPedido);
}
    
asked by anonymous 20.09.2018 / 20:01

1 answer

-1

You can extract the behavior that is within the for for a method and annotate this new method with @Transaction, so it will respect the transaction dealt with there first.

    
21.09.2018 / 20:05