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. 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.
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?