Quero criar uma tabela de histórico pra toda vez que uma entidade for mudada ser gravada na sua tabela equivalente de histórico. Só que não quero criar uma entidade EPessoa e outra EPessoaHist por causa da replicação de código, ou seja, se eu alterar EPessoa vou ter que lembrar de alterar EPessoaHist.
A pergunta: tem como eu utilizar uma mesma entidade mas persisti-la hora na sua tabela normal, hora na sua tabela de histórico?
Outras idéias de como implementar um histórico também é bem-vinda.
Você vai fazer isso para todas as tabelas?
Qual banco está utilizando?
Dependendo do banco utilizado, uma sugestão é fazer isso com uma trigger associada ao evento de update e que insira a informação desejada na tabela de histórico.
Você pode criar apenas uma tabela de histórico também e colocar como índice desta tabela o nome da tabela que foi alterada, ou algo neste sentido.
peczenyj
Uma forma se obter um histórico seria através de um Dynamic Proxy ou Aspecto, aonde vc chamaria codigo para “logar” as transformações do seu objeto. Assim, seria transparente ao objeto que ele possui um histórico, afinal vc pode implementar isso no braço. Deve ter alguma solução pronta, mas não me recordo de cabeça.
H
Horadranin
David, é para a aplicação ser independente de banco e de implementação do JPA, mas triggers é uma boa idéia, só que aí o dba é quem teria que resolver isso
peczenyj, não conheço nada de Dynamic Proxy ou Aspecto vou ter que pesquisar.
Mas por enquanto a resposta para minha pergunta é NÃO então? Não há como alterar a tabela de uma entidade sem ter que criar outra entidade e refazer os mapeamentos?