Vraptor + hibernate com dar baixa no estoque?

Opa iai galera tudo bem? estou com uma duvida eu estou seguindo a apostila fj28 e fiz ela toda e esta tudo funcionando so q eu qro dar baixa no estoque qndo por exemplo tem 15 dvds ao comprar 1 ficaria 14 no banco e eu não estou conseguindo fazer tentei assim mais não consegui,obrigado…segue meu codigo

carrinhoController

package br.com.umc.get.controller;

import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.umc.get.dao.ProdutoDao;
import br.com.umc.get.modelo.Carrinho;
import br.com.umc.get.modelo.Item;

@Resource
public class CarrinhoController {

private final Carrinho carrinho;
private final ProdutoDao dao;
private final Result result;

public CarrinhoController(Carrinho carrinho, ProdutoDao dao, Result result) {
this.carrinho = carrinho;
this.dao = dao;
this.result = result;
}

@Post @Path("/carrinho")
public void adiciona(Item item) {
dao.recarrega(item.getProduto());
dao.estoque(item.getProduto());
carrinho.adiciona(item);
carrinho.estoque(item);

result.redirectTo(this).visualiza();
}

public void visualiza() {
}

@Delete @Path("/carrinho/{indiceItem}")
public void remove(int indiceItem) {
carrinho.remove(indiceItem);
result.redirectTo(this).visualiza();
}

}

Carrinho

package br.com.umc.get.modelo;

import java.util.ArrayList;
import java.util.List;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

@Component
@SessionScoped
public class Carrinho {

private List itens = new ArrayList();
private Double total = 0.0;
private Integer ItemEstoque;

public List getItens() {
return itens;
}

public void setItens(List itens) {
this.itens = itens;
}

public Double getTotal() {
return total;
}

public void setTotal(Double total) {
this.total = total;
}

public Integer getItemEstoque() {
return ItemEstoque;
}

public void setItemEstoque(Integer ItemEstoque) {
this.ItemEstoque = ItemEstoque;
}

public void adiciona(Item item) {
itens.add(item);
total += item.getProduto().getPreco() * item.getQuantidade();
}

public Integer getTotalDeItens() {
return itens.size();
}

public void remove(int indiceItem) {
Item removido = itens.remove(indiceItem);
total -= removido.getProduto().getPreco() * removido.getQuantidade();
}

// esse seria o metodo q estou tentando fazer para dar baixar no estoque
public void estoque(Item item) {
ItemEstoque = item.getProduto().getEstoque() - item.getQuantidade();
}
}

Dao

package br.com.umc.get.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import br.com.caelum.vraptor.ioc.Component;
import br.com.umc.get.infra.CriadorDeSession;
import br.com.umc.get.modelo.Produto;

@Component
public class ProdutoDao {

private final Session session;

public ProdutoDao(Session session) {
this.session = session;
}

public void salva(Produto produto) {
Transaction tx = session.beginTransaction();
session.save(produto);
tx.commit();
}

public List listaTudo() {
return this.session.createCriteria(Produto.class).list();
}

public Produto carrega(Long id) {
return (Produto) this.session.load(Produto.class, id);
}

public void atualiza (Produto produto) {
Transaction tx = session.beginTransaction();
this.session.update(produto);
tx.commit();
}

public void remove(Produto produto) {
Transaction tx = session.beginTransaction();
this.session.delete(produto);
tx.commit();
}

public List busca(String nome) {
return session.createCriteria(Produto.class)
.add(Restrictions.ilike(“nome”,nome, MatchMode.ANYWHERE))
.list();
}

public void recarrega(Produto produto) {
session.refresh(produto);
}

// junto com esse metodo q iria atualizar no banco
public void estoque(Produto produto) {
Transaction tx = session.beginTransaction();
this.session.update(produto);
tx.commit();
}

}