Boa tarde,
Tive problemas com TransferObject hoje, porém já encontrei a solução e gostaria de propor, caso possível, uma mudança na implementação do método AbstractEntity.buildTO().
O problema era o seguinte: dada uma classe Entidade qualquer, eu queria atualizá-la com dados no formulário da página. Então, no Controle, eu populava um EntidadeImpl com os dados do formulário, criava um EntitdadeTOExample para passar os relacionamentos e, a partir daí, fazia:
EntidadeTO entidadeTO = entidadeImpl.buildTO(EntidadeTOExample);
O entidadeTO era, então, passado para o serviço e lá era chamado o método insertOrUpdate. Antes de chamar o método em questão, no entanto, era feito o seguinte:
EntidadeAbstract entidadeRecuperada = EntidadeImpl.getEntityFromTO(entidadeTO);
Nesse momento, entidadeRecuperada deveria ser populada com os dados que recebe do TO. No entanto, dado o id presente no entidadeTO, entidadeRecuperada era populada com os dados existentes no banco referentes àquele id.
Vendo a implementação dos TransferObjects, observei que getEntityFromTO só atualiza os dados caso a flag isUpdated do TransferObject esteja setada. Para isso, algum atributo do TransferObject precisa ser alterado em tempo de execução. O ponto aqui é: os dados foram, de fato, alterados... porém não diretamente no entidadeTO, e sim no entidadeImpl do qual eu criei o TransferObject.
A proposta, no caso, é: seria possível alterar o método AbstractEntity.buildTO() de modo que o mesmo pudesse fazer uma verificação se os dados do Impl que o chama são iguais aos dados persistidos no banco e, caso estejam diferentes, ative o flag isUpdated do TransferObject retornado?
Digo isso pois, n'outro teste, populei o Impl, chamei o buildTO e, arbitrariamente, escolhi um atributo qualquer da Entidade e alterei diretamente no TO. Isso foi suficiente para que os dados fossem atualizados no banco com sucesso.
Claro, é possível que, talvez, eu esteja usando os TransferObject de maneira incorreta. No entanto, fica a sugestão.
A versão do cartucho que uso é a 3.1.1.3.4.17-RC8.
Obrigado,
Raphael
Autor: Raphael Sant'Anna