E aqui estamos com a parte 2 desse tutorial meramente conceitual de Java para a Web. Nessa parte concluirei a persistência de um modelo retornando o id gerado pelo banco no caso de uma nova instância, e implementando a atualização (update) de uma instância já persistida.

Por isso, será um post pequeno e sucinto

Ah… a primeira parte pode ser encontrada aqui.

No final da parte 1, ficou no ar o problema da obtenção do id gerado pelo banco de dados. Afinal, é necessário que a instância do model em questão tenha esse identificador para que, no caso de uma nova persistência, ele seja atualizado e não inserido novamente.

A solução é bastante simples, mas varia de banco de dados para banco de dados. Ela basicamente se resume em adicionar uma consulta pelo último id gerado pela sequência da chave primária da tabela onde ocorreu a inserção.

No caso do PostgreSQL, quando definimos um campo como “serial”, automaticamente é criada uma sequência para geração automática desse campo. O nome dessa sequência segue o padrão: tabela_campo_seq

Assim, para o PgSQL, podemos obter o último id gerado para a tabela “pessoa” através da seguinte consulta:

Para alguns banco de dados como MySQL e (acredito eu) SQL Server, é possível utilizar um método comum:

Mas é necessário que o banco em questão suporte o retorno automático de chaves primárias… Infelizmente não é o caso do PostgreSQL.

Fácil, não? Agora, no BasicDao, temos que:

  1. construir um método para geração desse SQL;
  2. alterar o método “persist” para incluir este no SQL de inserção; e
  3. verificar o retorno da consulta para obter o id gerado.

Na linha 11, a consulta pelo id é inserida. E no bloco do if da linha 22, o resultado da consulta é verificado e o id é obtido e setado no model. Temos então, o modelo persistido e com o devido id.

Agora no BasicDaoTest podemos descomentar “assertNotNull(pessoa.getId());” e rodar o teste.

Se tudo estiver ok, podemos prosseguir para a atualização de models já persistidos.

A idéia é a mesma da inserção: geraremos um SQL para atualizar os dados de uma pessoa. Agora que temos o id de uma pessoa, podemos identificá-la no banco para realizar o update. O SQL a ser gerado, será algo semelhante a:

Sem mais enrolação, a implementação do método ficará assim:

Bem, como eu disse, a lógica é a mesma da construção do sql de inserção.

Agora podemos testar.

Esse último teste não pode ser avaliado automaticamente sem termos um meio de obter um model persistido pelo seu id. E como não implementamos a consulta ainda, podemos apenas observar a mudança pela interface do gerenciador do banco de dados.

Então, fica para a próxima parte, implementação da consulta de um model pelo seu id e finalização da camada de persistência.