Erro no metodo para registar movimentação com hibernate

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 !

e ae pessoal… voces poderiam me ajudar ?