Pergunta

Alguém tem alguma experiência com a criação de banco de dados aplicações agnósticas em Java, particularmente com Hibernate e, simultaneamente, visando bancos de dados Oracle e PostgreSQL?

Em particular, eu estou olhando para Oracle Spatial e PostGIS. Queremos criar um SOA baseada em Java que pode ser usado com ambas as extremidades traseiras Oracle Spatial e PostGIS. Eu usei Hibernate com esses dois bancos de dados, mas nunca com a intenção de atingir ambos. Eu posso criar cenários onde o mesmo código pode gerar resultados diferentes dependendo de qual banco de dados é usado.

É talvez que o Hibernate pode lidar com isso, mas seria bom ouvir se existem problemas conhecidos.

Ken

Foi útil?

Solução

juntamente com hibernate eu posso recomendar Hibernate Spatial , uma extensão que suporta MySQL, Oracle e Postgre, com suas respectivas extensões GIS.

algumas armadilhas i encontrado:

estar ciente, a configuração dos dialetos não era trivial para fazer corretamente. certifique-se os dialetos não são reconfigurados para cada afirmação, como aconteceu para mim.

dependendo das características de hibernatespatial você usa você pode ficar trancado dentro de um número de versão específico de hibernação

Você pode usar o critério de API só, hql não está directamente suportado.

meu código usando olhares hibernatespatial assim:

  if (query.getMaxDistance() != null && query.getCenter() != null) {
        basicCriteria.add(SpatialRestrictions.within("coordinate", GeoidCircleFactory.circle(query.getCenter(), query.getMaxDistance())));
    }

você vai sofrer de algumas das restrições postgis bastante terríveis e outros estão sob. eu recomendaria para relaxar algumas de suas necessidades de aplicação para melhor atender as possibilidades de seu DB. por exemplo, consultas em "espaço ângulo" são muito mais fáceis de fazer do que no "espaço euclidiano".

o código contido no GeoidCircleFactory parece muito assustador ...:)

Outras dicas

Além de usar dialetos hiberna você vai querer uma ferramenta de gestão de criação de banco de dados como Liquibase que permitirá a criação código a ser captada longe da sintaxe específica dos diferentes bancos de dados.

alças Hibernate com objectivo de diferentes bancos de dados usando sua Dialect abstração. Você não precisa fazer quaisquer alterações ao seu próprio aplicativo apenas a configuração do hibernate para cada banco de dados.

Você pode especificar na sua configuração do dialeto para uso com o seu banco de dados ou permitir que o Hibernate usar as configurações do driver JDBC para determinar o dialeto apropriado.

Após o comentário recebido, você olhou Hibernate Spacial ? É uma extensão do Hibernate para suportar dados geográfica, fornecendo os tipos e dialetos necessárias Hibernate.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top