E ae Pessoal, tudo certo ?
Eu tenho um metodo que registra toda a baixa e a entrada de produto no estoque na tabela movimentacao, eu nao estou conseguindo implementar usando o hibernate, eu fiz o metodo usando JDBC e a logica esta correta … agora quando eu faço a mesma logica usando hibernate ,nao funciona…
O codigo sem hibernate é o seguinte.
//meu bean produto esta assim
import java.io.Serializable;
public class Produto implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String descricao;
private int saldoAtual;
//O metodo que retorna a quantidade atual no produto dao esta assim
public int getQuantidadeAtual(int produto) throws SQLException {
int quantidade = 0;
PreparedStatement stmt = this.conexao
.prepareStatement("SELECT * FROM produto WHERE id = ?");
stmt.setInt(1, produto);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
quantidade = rs.getInt("saldoAtual");
}
return quantidade;
}
Agora na minha classe movimentacao, esta desta maneira
//bean movimentacao
public class Movimentacao implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private Produto produto;
private String tipo;
private int quantidade;
O metodo da classe movimento dao que esta funcionando e registrando as entradas e as saidas, sem usar hibernate
public void inserir(Movimentacao movimentacao) throws SQLException {
PreparedStatement stmt = this.conexao
.prepareStatement("INSERT INTO movimentacao(produto_id, tipo, quantidade) VALUES(?, ?, ?)");
stmt.setInt(1, movimentacao.getProduto().getId());
stmt.setString(2, movimentacao.getTipo());
stmt.setInt(3, movimentacao.getQuantidade());
try {
int saldoAtual = new ProdutoDAO().getQuantidadeAtual(movimentacao
.getProduto().getId());
if (movimentacao.getTipo().equals("E")) {
saldoAtual += movimentacao.getQuantidade();
} else {
saldoAtual -= movimentacao.getQuantidade();
}
ProdutoDAO produtoDAO = new ProdutoDAO();
produtoDAO.atualizarQuantidade(movimentacao.getProduto().getId(),
saldoAtual);
stmt.executeUpdate();
} catch (Exception erro) {
System.out.println("Erro: " + erro.getMessage());
} finally {
stmt.close();
this.conexao.close();
}
}
até ai esta certo… agora os metodos com hibernate
metodo da classe produtodao
public int getQuantidadeAtual(Long id){
int quantidade = 0;
Produto produto = (Produto)session.load(Produto.class, id);
quantidade = produto.getQuantidadeatual();
return quantidade;
}
O metodo da classe movimentacaodao que esta dando erro
public class MovimentacaoDao {
private Session session;
MovimentacaoDao(Session session) {
this.session = session;
}
public void adicionaMovimentacao(Movimentacao movimentacao){
int saldoAtual = new ProdutoDao(session).getQuantidadeAtual(movimentacao.getProduto().getId());
if(movimentacao.getTipo().equals("entrada")){
saldoAtual += movimentacao.getQuantidade();
}else{
saldoAtual -= movimentacao.getQuantidade();
}
Produto p = new Produto();
p.setId(movimentacao.getProduto().getId());
p.setQuantidadeatual(saldoAtual);
ProdutoDao dao = new ProdutoDao(session);
dao.atualiza(p);
this.session.save(movimentacao);
}
ao executar no jsp este metodo retorna esta mensagem de erro
exception
javax.servlet.ServletException: a different object with the same identifier value was already associated with the session: [br.com.projeto.modelo.Produto#90]
root cause
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.projeto.modelo.Produto#90]
voces poderiam me ajudar a resolver este problema ?
obrigado !