Update com jpa + hibernate

11 respostas
V

Eu adiciono os itens na venda mas não consigo atualizar a quantidade do produto no banco. Eu já pesquisei na net e não achei solução. Abaixo está o método que executa a sql:

public void atualizarQuantidade(Integer id, Integer quantidade){
        String sql = "update Produto p set p.quantidade = p.quantidade - :novaQuantidade where id =:codigo";
        HibernateUtil.session.openSession().clear();
        HibernateUtil.session.openSession().createQuery(sql).setInteger("novaQuantidade", quantidade).setInteger("codigo", id).executeUpdate();
    }

Alguma sugestão?

11 Respostas

Rafael_Guerreiro

Qual erro que acontece?

Dê mais detalhes para que a gente consiga te ajudar…

V

Não dá erro, só que o update não altera a quantidade do produto.

Rafael_Guerreiro

Ta. Faz assim:

public void atualizarQuantidade(Integer id, Integer quantidade){  
        Session session = HibernateUtil.session.openSession();
        Transaction tx = session.beginTransaction();
        try {
                String sql = "update Produto p set p.quantidade = p.quantidade - :novaQuantidade where id =:codigo";  
                session.createQuery(sql).setInteger("novaQuantidade", quantidade).setInteger("codigo", id).executeUpdate();
                tx.commit();
                session.close();
        } catch(HibernateException e) {
                tx.rollback();
                session.close();
                throw e;
        }
}
V

Deu certo, mas demora para executar qual o motivo que pode ser?

Rafael_Guerreiro

Existem vários motivos, mas eu não sei como está todo o ambiente ai para isso.

De qualquer forma, utilizar HibernateUtils.session é um dos motivos.

V

Tem outra solução então?

Rafael_Guerreiro

Tem. Mas você precisa me dar mais detalhes. Isso é uma aplicação web? Está usando algum framework MVC?

V

É uma aplicação web com jsf + hibernate + jpa + primefaces + postgres. Tenho um pacote de modelo, controller e dao.

Rafael_Guerreiro

Então procure sobre injeção de dependências no JSF.

A ideia é que você não precise se preocupar em abrir e fechar session.

Procure também sobre como configurar pool de conexões. Assim ele já vai abrindo as conexões para você usar.

V

Ok. Obrigado pela ajuda.

V

Eu sei que esse tópico não é sobre esse assunto mas estou com uma dificuldade de atualizar um dialog através de um botão que está em outro dialog como faço para saber o caminho correto?

Criado 14 de abril de 2014
Ultima resposta 14 de abr. de 2014
Respostas 11
Participantes 2