Oracle e SqlServer com Hibernate

5 respostas
P

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…

a sequencia gerada pelo oracle;

algumas constraints;

enfim  detalhes

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

fico no aguardo,
obrigado

5 Respostas

P

alguma idéia? plz?

maschiojv

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

tem como vc postar um exemplo?

maschiojv
public interface Pessoa {
	
	String getNome();
	
	void setNome(String nome);
}
public class PessoaOracle implements Pessoa {

	private String nome;

	//aqui vc coloca as annotations do Oracle
	@Override
    public String getNome() {
	    return nome;
    }

	@Override
    public void setNome(String nome) {
	    this.nome = nome;
    }
}
public class PessoaSQLServer implements Pessoa {

	private String nome;

	//aqui vc coloca as annotations do SQLServer
	@Override
	public String getNome() {
		return nome;
	}

	@Override
	public void setNome(String nome) {
		this.nome = nome;
	}
}
public class Factory {

	//na pratica isso vem de um arquivo de configuração ou coisa parecida
	private static final Object BANCO_ATUAL = "oracle";

	private static final Object SQL_SERVER = "sql_server";
	private static final Object ORACLE = "oracle";

	public static Pessoa getPessoa(){ 

		if(SQL_SERVER.equals(BANCO_ATUAL)){
			return new PessoaSQLServer();
		}
		if(ORACLE.equals(BANCO_ATUAL)){
			return new PessoaOracle();
		}
		else {
			throw new RuntimeException("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");
	}
Criado 12 de fevereiro de 2009
Ultima resposta 5 de mar. de 2009
Respostas 5
Participantes 2