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 ?
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.