Update com jpa + hibernate

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?

Qual erro que acontece?

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

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

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;
        }
}

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

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.

Tem outra solução então?

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

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

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.

Ok. Obrigado pela ajuda.

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?