Mapeamento das Classes Pai e suas Filhas

8 respostas
TorresNeto

Olá!
Tenho um sistema e estou precisando fazer um mapa com chaves pra todas as classes pai e suas filhas do sistema, para quando tiver um evento de exclusao da entidade, fazer a consulta nesta árvore de dependências e não deixar excluir a entidade, caso exista dependência pra ela.
Alguém pode me ajudar?

Desde já agradeço!! :smiley:

8 Respostas

GusMcCart

Banco de dados? Se sim já pensou em usar Foreign Key (chave estrangeira) ???

TorresNeto

GusMcCart não é banco de dados.

Segue um exemplo:

public Class Empresa{

private String CNJP;

private Empresa filial;

}

Uma empresa é pai de uma ou várias empresas filhas(filial). Quero que quando for excluir esta empresa, o sistema busque em um mapa se a Classe Empresa possui dependencias(filhas). Assim como Empresa, verificar tbm todas as classes que possuem dependencias quando precisar. Quero mapear todas as classes do sistema que possuem dependências, pra quando for excluir, verificar somente neste mapa.
Entendeu!?

asandrob

public class Empresa{ private Empresa matriz; private String CNPJ; private List<Empresa> filiais; }Dai vc testa quando não tem matriz, significa que ela é a matriz, e se o List tiver filiais, dai vc já saberá até quantas serão.
Se uma empresa tiver matriz dai vc saberá que ela é uma filial.

TorresNeto

asandrob:
public class Empresa{ private Empresa matriz; private String CNPJ; private List<Empresa> filiais; }Dai vc testa quando não tem matriz, significa que ela é a matriz, e se o List tiver filiais, dai vc já saberá até quantas serão.
Se uma empresa tiver matriz dai vc saberá que ela é uma filial.

Obrigado, mas eu usei empresa só como exemplo.
Assim como a classe Empresa, outras classes tem dependências, o que eu queria era não ter que fazer a mesma verificação de dependencias sempre que for excluir uma entidade.
Ao carregar o sistema, quero montar um mapa com todas as classes do sistema que tem alguma dependencia, tipo:

Agencia tem Endereco, Telefones e Banco como dependencia.
Empresa tem Empresa como dependencia.
País tem Estado como dependencia, que tem Cidade como dependencia.

um Map<> que vai ter como parametros uma árvore das entidades com suas dependencias. tipo:
Agencia, Empresa, Pais, Estado.

Aí quando for excluir qualquer entidade no sistema, verifico se existe no Map<>, existir eu verifico qual dependencia e exibo uma mensagem na tela, se nao existir deixo exluir. A minha dúvida é como varrer todas as classes do sistema, verificar se existe dependencia e então montar o mapa. Isso aconteceria ao iniciar o sistema.

asandrob

Tchê, juro que estou tentando imaginar oq vc quer com isso!!!
Ao instanciar uma classe, nela vc já saberia quais as dependencias.

Dá pra fazer com reflexão é percorrer uma classe e descobrir os seus atributos veja aqui http://www.guj.com.br/articles/10.
Então monta o teu MAP…
Mas isso me parece muito com persistencia de dados, dai vc poderia utilizar FK’s da vida.

TorresNeto
Criando um framework onde no controller, eu  precise colocar

public void excluir() {

fulano.exclui( entidade );

}

Por traz o framework mostra a mensagem na tela se foi com sucesso ou sem sucesso, sem precisar adicionar verificacao em todo metodo de excluir dos controllers.

sergiotaborda

O que vc precisa é usar um padrão chamado Metadata. Neste padrão vc cria outros objetos que mantém a informação que vc quer. Quem é a classe, quem são as filhas, em que campo da classe as encontrar, etc… Depois vc monta um algoritmo que via reflection e usando os metadados consegue sózinho aplicar a regra que vc quer (que é a regra de cascade-delete).

Para criar os metadados existem várias opções. Vc pode explicitamente criar essas classes na mão já que vc sabe as relações. Vc pode criar um xml com essas relações e carregá-lo para os objetos de metadados. Vc pode usar anotations e iterar as classes elas mesmas e criar os metadados.

Para iterar as classes vc precisa do pacote, ou pacotes, onde procurar as classes. Depois usar um algoritmo que pesquisas as classes no pacote. Este algoritmo envolve conhecimento de como as classes se relacionam a arquivos.

É mais simples do parece.

TorresNeto

sergiotaborda:
TorresNeto:

Assim como a classe Empresa, outras classes tem dependências, o que eu queria era não ter que fazer a mesma verificação de dependencias sempre que for excluir uma entidade.
Ao carregar o sistema, quero montar um mapa com todas as classes do sistema que tem alguma dependencia, tipo:

Agencia tem Endereco, Telefones e Banco como dependencia.
Empresa tem Empresa como dependencia.
País tem Estado como dependencia, que tem Cidade como dependencia.

um Map<> que vai ter como parametros uma árvore das entidades com suas dependencias. tipo:
Agencia, Empresa, Pais, Estado.

Aí quando for excluir qualquer entidade no sistema, verifico se existe no Map<>, existir eu verifico qual dependencia e exibo uma mensagem na tela, se nao existir deixo exluir. A minha dúvida é como varrer todas as classes do sistema, verificar se existe dependencia e então montar o mapa. Isso aconteceria ao iniciar o sistema.

O que vc precisa é usar um padrão chamado Metadata. Neste padrão vc cria outros objetos que mantém a informação que vc quer. Quem é a classe, quem são as filhas, em que campo da classe as encontrar, etc… Depois vc monta um algoritmo que via reflection e usando os metadados consegue sózinho aplicar a regra que vc quer (que é a regra de cascade-delete).

Para criar os metadados existem várias opções. Vc pode explicitamente criar essas classes na mão já que vc sabe as relações. Vc pode criar um xml com essas relações e carregá-lo para os objetos de metadados. Vc pode usar anotations e iterar as classes elas mesmas e criar os metadados.

Para iterar as classes vc precisa do pacote, ou pacotes, onde procurar as classes. Depois usar um algoritmo que pesquisas as classes no pacote. Este algoritmo envolve conhecimento de como as classes se relacionam a arquivos.

É mais simples do parece.

Obrigado pela resposta. Vou tentar fazer aqui.

Criado 8 de agosto de 2012
Ultima resposta 13 de ago. de 2012
Respostas 8
Participantes 4