CRUD EJB JSF - Problema ao Alterar

Boa noite a todos!
Estou fazendo um crud, mas ao alterar o objeto sempre esta perdendo o Id.

O fluxo é o seguinte:
Quando a tela é carregada é executado o método com o @PostConstruct então a lista de franquias é preenchida, eu seleciono uma franquia para ser alterada.
Nesse momento é preenchida a tela com os dados da franquia. Após editar a franquia e clicar em salvar o objeto franquia não esta com o ID cadastrado.

Não sei porque ele perde todos os valores dos atributos.


import br.com.ipirangahotstage.aplicacao.AplFranquia;
import br.com.ipirangahotstage.dominio.Franquia;
import java.util.Calendar;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.enterprise.inject.Model;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 *
 * @author rodrigo.xavier
 */
@Stateful
@Model
public class CtrFranquia {

    @EJB
    private AplFranquia aplFranquia;
    private Franquia franquia = new Franquia();
    private Franquia franquiaSelecionada;
    private List<Franquia> listagem;

    @PostConstruct
    public void contruido() {
        atualizarLisagem();
    }

    // <editor-fold defaultstate="collapsed" desc="Gets e Sets">
    public void setFranquia(Franquia franquia) {
        this.franquia = franquia;
    }

    public Franquia getFranquia() {
        return franquia;
    }

    public List<Franquia> getListagem() {
        return listagem;
    }

    public void setListagem(List<Franquia> listagem) {
        this.listagem = listagem;
    }

    public void setFranquiaSelecionada(Franquia franquiaSelecionada) {
        this.franquiaSelecionada = franquiaSelecionada;
    }

    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="Métodos">
    public void salvar() {
        try {
            if (franquia.getDataInclusao() == null) {
                franquia.setDataInclusao(Calendar.getInstance().getTime());
            }
            aplFranquia.salvar(franquia);
            atualizarLisagem();
            franquia = new Franquia();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aplicação", "Dados gravados com sucesso!"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", ex.getMessage()));
        }
    }

    public void excluir() {
        aplFranquia.excluir(franquiaSelecionada);
        listagem = aplFranquia.getListagem();
    }

    public void atualizarLisagem() {
        listagem = aplFranquia.getListagem();
    }
    // </editor-fold>
}
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                template="./../arquivos/modelos/decorador.xhtml">

    <ui:define name="conteudo">
        <h:form id="formFranquia">
            <p:fieldset legend="Cadastro de Franquia" id="fldCadastro">
                <p:messages id="messages" autoUpdate="true" showDetail="true" /> 
                <p:panelGrid id="pnlForm" columns="2" style="margin-bottom: 10px;">

                    <h:outputText value="Data da Inclusão"  />
                    <p:calendar value="#{ctrFranquia.franquia.dataInclusao}"
                                showOtherMonths="true" showButtonPanel="true"
                                effect="fadeIn" pattern="dd/mm/yyyy hh:m:ss"
                                id="txtDataInclusao" locale="pt_BR"
                                readonly="true" />
                    
                    <h:outputText value="Descrição Franquia" />
                    <p:inputText required="true" label="Descrição Franquia" id="txtDescricaoFranquia"
                                 value="#{ctrFranquia.franquia.descricao}" /> 

                    <h:outputText value="Informações Adicionais" />
                    <p:inputTextarea label="Informações Adicionais" id="txtInformacoesAdicionais"
                                     value="#{ctrFranquia.franquia.infoadicional}" 
                                     style="width:300px;height:100px;"  /> 

                    <f:facet name="footer"> 
                        <p:commandButton 
                            value="Salvar" 
                            update="@form fldCadastro :formLista" 
                            icon="ui-icon-disk"  
                            actionListener="#{ctrFranquia.salvar()}" />
                        <p:commandButton type="reset" value="Limpar" icon="ui-icon-cancel" />
                    </f:facet>
                </p:panelGrid>           
            </p:fieldset>  
        </h:form>
        <h:form id="formLista">
            <p:dataTable id="tbLista" var="obj" 
                         value="#{ctrFranquia.listagem}" 
                         paginator="true"                                                                          
                         rows="10" >
                <f:facet name="header">
                    Lista de Franquias
                </f:facet>
                <p:column headerText="Código" sortBy="#{obj.id}" filterBy="#{obj.id}">
                    #{obj.id}
                </p:column>
                <p:column headerText="Descrição" sortBy="#{obj.descricao}"
                          filterBy="#{obj.descricao}">
                    #{obj.descricao}
                </p:column>
                <p:column headerText="Data Inclusão" >				
                    #{obj.dataInclusao}
                </p:column>
                <p:column headerText="Informações Adicionais" >
                    #{obj.infoadicional}
                </p:column>			
                <p:column>
                    <f:facet name="header">Operações</f:facet>
                    <p:commandButton image="ui-icon ui-icon-trash"
                                     action="#{ctrFranquia.excluir}"
                                     update=":formLista"
                                     title="Excluir" >
                        <f:setPropertyActionListener
                            target="#{ctrFranquia.franquiaSelecionada}" value="#{obj}"  />
                    </p:commandButton>
                    <p:commandButton image="ui-icon ui-icon-pencil"                                     
                                     update=":formFranquia"                                         
                                     title="Editar">
                        <f:setPropertyActionListener
                            target="#{ctrFranquia.franquia}" value="#{obj}" />
                    </p:commandButton>
                </p:column>
            </p:dataTable>

        </h:form>
    </ui:define>

</ui:composition>

Obrigado!

Olá cidao.

Será que seu problema não seria estar instanciando uma nova franquia por default?

private Franquia franquia = new Franquia(); 

Ao invés disto, tente não instanciar, ou pelo menos instanciar no @PostConstruct:

@PostConstruct  
    public void contruido() {  
        atualizarLisagem();  
        franquia = new Franquia();  
    }  

Eu não entendi pq em um dos f:setPropertyActionListener vc está referenciando a franquiaSelecionada e no outro a franquia.

Espero ter ajudado.

Até +!

Infelizmente não funcionou.
Efetuei um debug da aplicação e o evento @PostConstruct é executado a cada post do sistema. Durante o debug no momento que iria realizar a alteração, antes de executar a linha

atualizarLisagem();   

o objeto franquia ja estava nulo.

O que esta acontecendo é como o @Stateful não estivesse funcionando.