Hibernate Envers + relacionamento com revisão específica da entidade

2 respostas
P

Olá galera, minha dúvida é a seguinte:

Utilizo o Hibernate Envers para efetuar a auditoria das entidades de uma aplicação.
Para aqueles que ainda não conhecem vale a pena dar uma olhada, http://www.jboss.org/envers.

Desta maneira a cada commit efetuado nas entidades controladas pelo Envers, ele cria uma entrada(revisão) em uma tabela auxiliar, possibilitando carregar uma entidade dentro de uma revisão específica, assim como funciona em no SVN, GIT e outros sistemas de controle de versão de arquivos.

Tenho o seguinte cenário, uma entidade Pedido e outra Produto.
Eu gostaria de relacionar uma determinada revisão dos Produtos a uma instância de Pedido, sendo assim, se futuramente o preço do produto for alterado ainda assim o pedido continua consistente ao produto, e suas características, de quando este foi adicionado ao Pedido.

Alguém já fez algo parecido ou tem alguma idéia de como chegar neste resultado ?

2 Respostas

visola

Resolvi esse problema com uma tabela auxiliar que registra o preço do produto na hora da compra. Então você teria uma classe Pedido que se relaciona com uma outra classe (ProdutoPedido, por exemplo), que se relaciona com o Produto. No momento que o pedido é feito, é salvo também o preço do produto como histórico.

Você poderia tentar fazer um controle de versão como você disse, mantendo uma única tabela de produtos onde cada produto tem uma data de expiração. Quando o preço mudar, vocẽ cria um novo registro e marca o antigo como expirado. O produto que não estiver expirado é o produto atual. Acho que fica um pouco mais complicado.

Nunca ouvi falar no Envers mas se ele faz isso para você, então é uma solução também.

P

Olá visola,

A alternativa de criar tabelas auxiliares é exatamente a que utilizamos no sistema atual (legado).
O problema que temos, é que existem muitas entidades que necessitam deste controle, cada uma com seu conjunto de propriedades que necessitam o versionamento. O caso do Pedido x Item foi somente um exemplo citado para compreensão do problema.
Sendo assim estamos tentando resolver o problema de ter diversos dados duplicados, o que causa difícil manutenção e gera uma certa desconfiança quanto a eficácia do sistema.
De qualquer forma, agradeço sua ajuda.

Criado 1 de março de 2011
Ultima resposta 1 de mar. de 2011
Respostas 2
Participantes 2