Boa Tarde…
Estou desenvolvendo um projeto web utilizando SpringRoo e JSF 2.0, e até o momento estou gostando muito da produtividade do SpringRoo com a facilidade do JSF 2.0.
O SpringRoo ja cria os metodos de inserção / alteração / exclusão dentro da entidade Exemplo: Usuario, como o ele usa JPA basta fazer como o exemplo abaixo para inserir um registro no Banco:
Usuario usuario = new Usuario();
set…
usuario = usuario.merge();
com isso o SpringRoo ja abre a transação, salva o usuário e faz o commit.
Vamos ao problema
O metodo merge do jpa funciona tanto para inserir ou alterar um objeto no banco de dados, o problema esta acontecendo quando carrego em uma lista datatable usando primefaces e clico no botão alterar em um dos usuarios listados na lista, nesse momento passo o usuario selecionado para o objeto usuario do meu controller JSF, carrego em um formulario onde pode ser alterado seus dados, apos alterar e tentar gravar o metodo merge do JPA não altera o usuario no banco, e sim insere um novo usuario com os dados preenchidos no formulario, parece que JPA perde a ligação deste meu objeto com o banco de dados e insere ele novamente, mesmo este ja possuindoum Id ele insere outro registro com um id novo que é gerado automaticamente. Percebi que se mudar meu controller JSF de scopo Request para Session funciona normal, mas por questão de performace preciso usar o scope Request, como contornar isso?