Update com HQL - RESOLVIDO

Salve Pessoal,

Eu preciso fazer um update em um banco de dados mas o valor a ser atualizado precisa ser multiplicado pelo valor de um campo do mesmo registro. Em SQL fica assim:

update linha set taxafalha = comprimento*txFalha/1000, temporeparo = trReparo;

ou seja, o valor do campos taxafalha precisa ser multiplicado pelo valor campo comprimento da mesma linha, pelo valor do parâmetro txFalha e dividido por 1000. Tentei fazer diretamente em SQL mas recebi como msg que preciso usar o HQL. Para o resto da consulta não tem problema. Sem a conta tb funciona, com o seguinte código:

            String hql = "update Linha set taxafalha = :txFalha, temporeparo = :tpReparo";
            Query query = session.createQuery(hql);
            query.setDouble("txFalha", Double.valueOf(taxaFalha));
            query.setDouble("tpReparo", Double.valueOf(tempoReparo));
            rowCount = query.executeUpdate();

Alguem tem idéia de como posso fazer para resolver este problema? Obrigado,

celso

Salve Pessoal,

Eu estava tentando com o session.createSQLQuery. COm o createQuery funcionou. Se interessar pra alguem o código ficou assim:

    public int updateTxLinha(String taxaFalha, String tempoReparo) {
        int rowCount = 0;
        try {
            Session session = HibernateUtil.currentSession();
            Transaction tx = session.beginTransaction();

            String sql = "update Linha set taxafalha = comprimento*" +
                    taxaFalha + "/1000, temporeparo = " + tempoReparo;
            
            Query query = session.createQuery(sql);          
            rowCount = query.executeUpdate();


            tx.commit();
        } catch (HibernateException ex) {
            logger.error("Ocorreu um erro na atualização das taxas de falha das linhas: " + ex);
        }

        return rowCount;
    }

Obrigado,

celso

Boa noite Colegas !

jcfreire

Não entendi uma coisa… na sua duvida vc queria taxaFalha = comprimento * taxaFalha / 1000, sendo que taxaFalha e comprimento eram campos do banco de dados.
Como não existia clausula where, entendi que todas as linhas da tabela seria atualizadas, sendo que para cada registro seria utilizado a taxaFalha e comprimento correspondentes.

Na solução você esta passando taxaFalha e comprimento como parametros, logo todos os registros da tabela serão atualizados utilizando os mesmos falores de taxaFalha e comprimento… é isso mesmo ?

Ou eu não entendi o que você queria fazer ?

Obrigado.

Um abraço.

Olá,

Esta função faz parte de um sistema para cálculo de confiabilidade de sistemas elétricos. Ao executar uma simulação, eu leio em uma janela o valor de uma taxa de falha e de um tempo de reparo. O problema é que a taxa de falha de uma linha de transmissão é fornecida por Km. No cadastro inicial do BD, eu coloco um valor qq pra taxa de falha mas o comprimento correto para a linha que é um dado que eu conheço. Em função do tipo de linha de transmissão a ser usada em uma simulação, o usuário define o valor da taxa de falha por Km, e eu preciso alterar todas as linhas do BD em função deste valor e do valor do comprimento de cada linha que eu já tenho cadastrado, pois utilizo o valor da taxa de falha em alguns cálculos. Ficou meio complicada a explicação… Deu pra entender?

A solução que eu apresentei com o SQL fucionou, mas vc sabe se tem alguma maneira de fazer a mesma coisa com HQL? Tem jeito de definir o valor de um parâmetro, sendo que este valor é calculado em função da multiplicação do parâmetro passado a função por um campo da mesma linha que será alterada?

Abraços,

celso