JSF registrando no banco automaticamente

Galera bom dia estou estudando JSF e to com uma pequena dúvida eu tenho um dataTable que me retorna alguns objetos do tipo List, e na pagina que tem a dataTable tem mais 2 buttons um de pesquisa outro de cadastro, o sinistro é o seguinte:

Na minha dataTable tenho 2 inputText que vem os valores da minha List, se eu alterar estes valores e clicar em pesquisar ou em qqr outro botao, ele simplesmente SOBRESCREVE o valor no meu banco o que escrevi no inputText, sendo que cliquei em um botao que efetua pesquisa e em momento algum ele faz um insert ou update no banco.

È possivel o Spring gravar automaticamente informacao no banco ?

veja meu codigo

<fieldset style="width: 90%">
                        <legend>Cadastrar IMC</legend> 
                        <span jsfc="h:messages" globalOnly="true"></span>
                        <br />
                        Codigo da Carteirinha<br/>
                        <h:inputText value="#{pacienteController.paciente.pac_codCart}" size="8" id="pac_codCart" style="width: 170px">

                        </h:inputText>

                        <input jsfc="h:commandButton" type="submit" action="#{pacienteController.pesquisa}"
                               id="pesquisa" value="Pesquisar"/>
                        <br /><br />

                        <h:dataTable border="1" id="pacientes" 
                                     style="width: 94%" class="menu1"
                                     value="#{pacienteController.pesquisa()}"
                                     var="item" rendered="${pacienteController.paciente.pac_codCart != null}">
                            <h:column id="column1">
                                <f:facet name="header">
                                    <h:outputText value="Nome"/>
                                </f:facet>
                                <h:outputText value="#{item.pac_nome}"/>
                            </h:column>

                            <h:column id="column2">
                                <f:facet name="header">
                                    <h:outputText value="Codigo"/>
                                </f:facet>
                                <h:outputText value="#{item.pac_codCart}" />
                            </h:column>

                            <h:column id="column3">
                                <f:facet name="header">
                                    <h:outputText value="Peso"/>
                                </f:facet>
                                <h:inputText value="#{item.pac_peso}" size="8" 
                                             id="pac_peso">
                                </h:inputText>
                            </h:column>

                            <h:column id="column4">
                                <f:facet name="header">
                                    <h:outputText value="Altura"/>
                                </f:facet>
                                <h:inputText value="#{item.pac_altura}" size="8" 
                                             id="pac_altura">
                                </h:inputText>
                            </h:column>

                            <h:column id="column5">
                                <f:facet name="header">
                                    <h:outputText value="IMC"/>
                                </f:facet>
                                <h:inputText value="#{item.pac_imc}" size="8" 
                                             id="pac_imc" disabled="true" >
                                </h:inputText>
                            </h:column>
                        </h:dataTable>
                        
                        <input jsfc="h:commandButton" type="submit" 
                               id="cadastrar" value="Cadastrar"/>
                    </fieldset>

Vou exemplificar novamente a pagina vai ser carregada com os valores pesquisados, ai vou no campo

<h:inputText value="#{item.pac_altura}" size="8" 
                                             id="pac_altura">
                                </h:inputText>

que no caso esta retornando o valor 111, se eu escrever 222 e clicar em pesquisar ele ta gravando esta informacao no banco sinistramente.

isso é uma funcionalidade do hibernate/jpa.

o que acontece é que quando vc altera os dados da tela e faz o submit usando a pesquisa, o jsf seta o valor que vc preencheu na tela no objeto que esta sendo gerenciado pelo hibernate/jpa,
e quando esse objeto que esta sendo gerenciado sofre alteração o jpa faz um update para que os dados fiquem consistentes.

Mas se eu fiz uma pesquisa é correto ele atualizar automaticamente no banco pq pensa cumigo tenhu uma tela q me retorna o que eu pesquisei, ai eu começo a fazer as alteracões e derrepente nao preciso mais dessas alterações o que faço?

uma opção é ao invés de fazer o bind do seu grid com a lista que vc fez a consulta, fazer o bind com uma copia defensiva dessa lista , ai vc so vai atualizar quando vc clicar em alterar.

outra opção apos vc fazer a consulta tirar a lista do gerenciamento do hibernate, mas isso vai te trazer alguns problemas, por exemplo se vc tem atributo na sua entidade anotado como lazy , ao tirar o objeto do gerenciamento do hibernate quando vc fizer um get nesse atributo vc pode receber uma exception no lugar.

acho que é isso

pode ser que haja alguma forma de configurar isso mas eu não sei te informa

Alguem tem algum exemplo de como faço para só cadastrar quando realmente clicar em cadastrar?