Pessoal alguem sabe se eh possivel eu alterar um @Table em uma entity em tempo de execucao? exemplo. eu tenho uma tela de cadastro de apresentante por exemplo, porem eu tenho cadastro de apresentante em 5 projetos diferente , entao eu queria fazer o seguinte, uma entity generica, que na hora q eu chamar essa tela de cadstro eu passo em qual catalog = “db”, schema = “schema” eu quero salvar… e possivel alterar esses valores via reflection ? antes de persistir o objeto??
Pessoal alguem sabe se eh possivel eu alterar um @Table em uma entity em tempo de execucao? exemplo. eu tenho uma tela de cadastro de apresentante por exemplo, porem eu tenho cadastro de apresentante em 5 projetos diferente , entao eu queria fazer o seguinte, uma entity generica, que na hora q eu chamar essa tela de cadstro eu passo em qual catalog = “db”, schema = “schema” eu quero salvar… e possivel alterar esses valores via reflection ? antes de persistir o objeto??
valeu
nossa! c acabou de me dar uma ideia =D … sempre quiz fazer isso… vou montar aqui, conseguindo posto aqui
abraços
Lavieri
consegui!
to usando o pacote Mirror, apenas pq ele ajuda a fazer reflexão, mas se quiser fazer com java puro! fique a vontade.... como VRaptor já vem com o pacote... =x
Você até pode alterar o valor do @Table, porém o JPA (e filhos) não fica lendo isso a toda hora que precisa usar. Isso fica dentro de um mapa de entidade <-> tabelas. por mais que você altere o valor do @Table ele sempre vai pegar o valor original de quando o entity-manager-factory foi inicializado.
Penso que o que você quer fazer é um pouco, desculpe a palavra, xunxo. Quem sabe você usa então herança entre essas classes, especializando conforme os tipos que você precisa.
Abraços
Lavieri
garcia-jj:
Você até pode alterar o valor do @Table, porém o JPA (e filhos) não fica lendo isso a toda hora que precisa usar. Isso fica dentro de um mapa de entidade <-> tabelas. por mais que você altere o valor do @Table ele sempre vai pegar o valor original de quando o entity-manager-factory foi inicializado.
Penso que o que você quer fazer é um pouco, desculpe a palavra, xunxo. Quem sabe você usa então herança entre essas classes, especializando conforme os tipos que você precisa.
Abraços
sim sim, tem que alterar antes da factory ser inicializada, isso é um fato
Lavieri
Simplificando o uso 10x =D
//eu sei que fica um pouco estranho, withValue() antes do theParameter .... mass... é a unica forma de não precisar escrever o nome das propriedadesAnnotationMirror.on(Acesso.class).set().onAnnotation(Table.class).withValue("TBLAcesso").theParameter().name();AnnotationMirror.on(Acesso.class).set().onAnnotation(Table.class).withValue("dataBase1").theParameter().schema();AnnotationMirror.on(Acesso.class).set().onAnnotation(Table.class).withValue("dbo").theParameter().catalog();Tableanotacao=Acesso.class.getAnnotation(Table.class);System.out.println(anotacao.name());System.out.println(anotacao.catalog());System.out.println(anotacao.schema());
para usar essa abordagem faça download do .java anexado