Ajuda método de Alteração JSF e Hibernate

Boa noite,

Pessoal, estou seguindo um curso Casa do Código de JSF e estou tento problemas com a alteração.

Segui o exemplo proposto no livro, porém quando clico para alterar, meu método acaba salvando um novo registro no banco.

Provavelmente o problema está na passagem do ID por parametro, embora no livro tenha dito que não era necessário passar o ID se usar a anotação
@ViewScoped , porém o ID não é passado usando a anotação. Alguém pode me ajudar?

Segue o fonte:

[code]<?xml version='1.0' encoding='UTF-8' ?>

Cadastro de Produtos
        <h2>
            <h:outputText value="Novo Produto"
                          rendered="#{empty produtoBean.produto.id}"/>
            <h:outputText value="Editar Produto" rendered="#{not empty produtoBean.produto.id}"/>
        </h2>


        <h:panelGrid>
            <h:outputLabel value="Descrição" for="descricao"/>
            <h:inputText id="descricao" value="#{produtoBean.produto.descricao}"/>
            <h:outputLabel value="Unidade" for="unidade"/>
            <h:inputText id="unidade" value="#{produtoBean.produto.unidade}"/>
            <h:outputLabel value="Preço" for="preco"/>
            <h:inputText id="preco" value="#{produtoBean.produto.preco}"/>
            <h:commandButton value="Gravar" action="#{produtoBean.gravar()}"/>

            <!-- Lista de Produtos-->
            <h:dataTable value="#{produtoBean.produtos}" var="produto">
                <h:column>
                    <f:facet name="header">Descrição</f:facet>
                        #{produto.descricao}
                </h:column>
                <h:column>
                    <f:facet name="header">Unidade</f:facet>
                        #{produto.unidade}
                </h:column>
                <h:column>
                    <f:facet name="header">Preço</f:facet>
                        #{produto.preco}
                </h:column>
                <h:column>
                    <f:facet name="header">Ações</f:facet>
                    <h:commandLink action="#{produtoBean.remover(produto)}" value="Remover"/>
                    <h:commandLink value="Alterar">
                        <f:setPropertyActionListener value="#{produto}" target="#{produtoBean.produto}"/>
                    </h:commandLink>
                </h:column>

            </h:dataTable>
        </h:panelGrid>
    </h:form>

</h:body>

[/code]

Método no ManagerBean

[code] public void gravar(){
Dao dao = new Dao(Produto.class);
System.out.println(“ID DO PRODUTO” + produto.getId());
if(this.produto.getId() != null){
System.out.println(produto.getId());
dao.atualizar(produto);
}else{
dao.adicionar(produto);
}

    this.produtos = dao.getListaTodos();
    this.produto = new Produto();
}[/code]

Dao

@Override public void atualizar(T obj) { EntityManager em = JPAHibernateUtil.getEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); em.merge(obj); tx.commit(); em.close(); }

Desde já, agradeço!