Estou começando com hibernate desenvolvendo um sistema que irá trabalhar com esses dois bancos…
O problema é o seguinte: após desenvolver boa parte do sistema realizando os testes em oracle, quando passamos a testar no sqlserver existiram alguns problemas…
isso tudo resolvido com annotations e lógico a troca do .jar de conexão…
a minha dúvida é a seguinte: pesquisei pelo google e não encontrei algo que eu pudesse utilizar como um @IF para saber se a conexão é oracle ou sqlserver e ativar as annotations apropriadas…
existe algo parecido com isso?
pq até então, estou comentando e descomentando linhas de .xml e annotations… oq é nem um pouco trivial
Defina uma interface para as suas classes, dai vc faz duas implementações, uma pro oracle e outra pro sqlserver, dai vc usa uma factory pra fabricar a instancia certa de acordo com o banco que vc quer usar.
P
pinheiro.cc
tem como vc postar um exemplo?
maschiojv
public interface Pessoa {
String getNome();
void setNome(String nome);
}
publicclassPessoaOracleimplementsPessoa{privateStringnome;//aqui vc coloca as annotations do Oracle@OverridepublicStringgetNome(){returnnome;}@OverridepublicvoidsetNome(Stringnome){this.nome=nome;}}
publicclassPessoaSQLServerimplementsPessoa{privateStringnome;//aqui vc coloca as annotations do SQLServer@OverridepublicStringgetNome(){returnnome;}@OverridepublicvoidsetNome(Stringnome){this.nome=nome;}}
publicclassFactory{//na pratica isso vem de um arquivo de configuração ou coisa parecidaprivatestaticfinalObjectBANCO_ATUAL="oracle";privatestaticfinalObjectSQL_SERVER="sql_server";privatestaticfinalObjectORACLE="oracle";publicstaticPessoagetPessoa(){if(SQL_SERVER.equals(BANCO_ATUAL)){returnnewPessoaSQLServer();}if(ORACLE.equals(BANCO_ATUAL)){returnnewPessoaOracle();}else{thrownewRuntimeException("banco inválido");}}}
é só um exemplo, faça uma factory mais elaborada que isso blz ;)
maschiojv
é claro que só isso não resolve, na hora de fazer a configuração do hibernate vc vai ter que passar a implementação certa de pessoa que vc quer usar como mapeamento
algo como:
AnnotationConfiguration annotationConfiguration = new AnnotationConfiguration();
if(SQL_SERVER.equals(BANCO_ATUAL)){
annotationConfiguration.addAnnotatedClass(PessoaSQLServer.class);
}
if(ORACLE.equals(BANCO_ATUAL)){
annotationConfiguration.addAnnotatedClass(PessoaOracle.class);
}
else {
throw new RuntimeException("banco inválido");
}