Datatable nao atualiza JPA+HIBERNATE+JSF+PRIMEFACES

quando clico no save, se caso esteja faltando um campo obrigatório ou não atendeu alguma regra deveria retorna a table no seu estado inicial sem alteraçao,
mao por exemplo apaguei um campo obrigatorio na dataTable esse campo fica em branco…e qdo clico em “clean” a tabela retorna ao estado inicial, gostaria de entender pq no caso de erro essa tabela esta vindo alterada.

 <h:form>

              <p:panel>
                     campos carregados pelo #{pandLMB.cadastroSelecionado} para fazer o updade ou insert

              </p:panel>

 
               <p:outputPanel >
                        <p:commandButton id="btGravar" value="Save" actionListener="#{pandLMB.salvar}" 
                                         icon="ui-icon-disk" update=":form"
                                         style="font-size:12px;margin-right:30px;"/>
                        
                        <p:commandButton id="btLimpar" value="Clean" 
                                         icon="ui-icon-trash" style="font-size:12px;" 
                                         actionListener="#{pandLMB.limpar}" ajax="false" />  
                    </p:outputPanel>

        <p:dataTable id="table" value="#{pandLMB.lista}" var="q"
                                 emptyMessage="No Registry" editable="true" paginator="true"
                                 rows="10" filteredValue="#{pandLMB.listaFiltrada}"
                                 rowsPerPageTemplate="10,50,200,500" rowKey="#{q.id}"
                                 style="table-layout:fixed;font-size:x-small;"
                                 selection="#{pandLMB.cadastroSelecionado}" selectionMode="single">
   </p:dataTable>
</h:form>

bean


@ManagedBean
@ViewScoped
public class PandLMB {

private...

 public PandLMB() {
        dao = new PandLDAO();
        carregarLista();
    }

 public void carregarLista() {

        if (null == lista) {
            lista = new ArrayList<CadPandl>();
        }

        if (lista.isEmpty()) {
            lista = dao.recuperarTodos();
        }

        if (null == cadastroSelecionado) {
            cadastroSelecionado = new CadPandl();
            cadastroSelecionado.setFunctionalArea(new FunctionArea());
        }


        if (lista == null) {
            MessagesUtil.exibeMensagem("Error on loading data P and L", "", false);
        }
    }

    public void salvar(ActionEvent event) {
        boolean i = false;
        if (cadastroSelecionado.getAccountNumber() == null
                || cadastroSelecionado.getCategoriaPel().equals("")
                || cadastroSelecionado.getStatus() == null) {
            MessagesUtil.exibeMensagem("Mandatory fields must be filled.", "Info", true);
        } else {
            i = dao.inserir(cadastroSelecionado);
             if (!(i)) {
                MessagesUtil.exibeMensagem("Only months current accounts can be changed.", "Error", true);
            }
        }
        if (i) {
           
            MessagesUtil.exibeMensagem("Data inserted successfully.", "Success", true);
        }
        limpar(event);
    }
    
public void limpar(ActionEvent event) {
        setCadastroSelecionado(new CadPandl());
        setListaFiltrada(null);
        RequestContext.getCurrentInstance().reset("form:gridCadastro");
        carregarLista();
    }



//get e sets..

pessoal se eu fizer isso dá certo, mais gostaria de nao precisar chamar um dialog

 <p:commandButton id="btGravar" value="Save" actionListener="#{pandLMB.salvar}" 
                                         icon="ui-icon-disk" update=":form"
                                         oncomplete="confirmation.show()"
                                         style="font-size:12px;margin-right:30px;"/>

:
:
:
  <p:confirmDialog id="confirmDialog"
                                 message="Are you sure you want to save the data?"
                                 header="Saving Account" severity="alert" widgetVar="confirmation">

                    <p:commandButton id="confirm" value="Yes" update="messages"
                                     oncomplete="confirmation.hide()"
                                     actionListener="#{pandLMB.salvar()}" />
                    <p:commandButton id="decline" value="No" update=":form" ajax="false"
                                     onclick="confirmation.hide()" type="submit" />

                </p:confirmDialog>

coloca um id no <h:form>

exemplo:

<h:form id=“formteste”>

<p:commandButton id=“btGravar” value=“Save” actionListener="#{pandLMB.salvar}“
icon=“ui-icon-disk” update=”:formteste"
oncomplete="confirmation.show()"
style=“font-size:12px;margin-right:30px;”/>