3
respostas

Relacionamento OneToMany de entidades

Olá, talvez não seja uma dúvida pura de hibernate porém é uma situação real: Tenho 3 classes (Pessoa, Equipamento, Atualizacao) a classe Atualizacao é para guardar quando ocorreu uma alteração em pessoa ou em Equipamento.

Dentro da Classe Atualizacao tenho:

    private Long id;
    private Calendar dataAtualizacao;

O registro de uma pessoa pode ter várias alterações logo tenho nesta classe o seguinte atributo:

    private List<Atualizacao> atualizações;

Por sua vez no cadastro dos equipamentos também posso ter várias alterarões também, portanto:

    private List<Atualizacao>atualizacoes

Sei que poderia ter resolvido esta questão eliminando a classe Atualizacao e inserindo o atributo DataAtualizacao nas classes Pessoa e Equipamento, porém não conseguiria gerar um histórico.

Pergunta 1: É comum neste tipo de situação gerar esta solução de criar uma classe atualização que também poderíamos chamar de histórico, ou existem soluções mais adequadas?

Pergunta 2: Pegando por exemplo a classe Pessoa, como ficaria um relacionamento de OneToMany em relação a classe Atualização?

att.:

Gonzaga

3 respostas

Oi Gonzaga tudo bem?

Sua linha linha de raciocínio esta correta, porem a entidade atualização não guarda informação de quem foi atualizado, (Se foi uma pessoa ou um equipamento), talvez seria uma boa alternativa (por questão de semântica) criar duas entidades, uma atualizacaoPessoa, e uma atualizacaoEquipamento. Em relação ao modelo Pessoa você tem que fazer uma mapeamento OneToMany, onde a entidade pessoa pode ter varias atualizações.

Espero ter ajudado :) Bons Estudos

Olá Caio, tudo bem? Já tinha pensado nesta questão de gerar uma tabela de histórico para cada tabela do modelo, o problema desta abordagem seria a quantidade de tabelas geradas caso quisesse implementar esta solução em um banco de dados com aproximadamente uma centena de tabelas. Mas concordo contigo, da perspectiva da semântica é a melhor abordagem. Na verdade eu queria ver se vcs conhecem algum outro tipo de abordagem para lidar com históricos e banco de dados.

Muito obrigado pelo retorno.

Atenciosamente,

Gonzaga.

Oi Gonzaga, no JPA tem um padrão que você pode pesquisar, chamado BaseEntity, que informa a versão do dado, ou seja, se houver um update nesta entidade, a versão é incrementada, porem infelizmente ele não informa o que foi alterado.