Cibler une application Java à Oracle et Postgres
-
18-09-2019 - |
Question
Quelqu'un at-il une expérience avec la base de données la création d'applications agnostiques en Java, en particulier avec Hibernate, et le ciblage en même temps les bases de données Oracle et Postgres?
En particulier, je suis à la recherche d'Oracle Spatial et PostGIS. Nous voulons créer un Java SOA qui peut être utilisé à la fois Oracle Spatial et PostGIS extrémités arrière. Je l'ai utilisé Hibernate avec ces deux bases de données, mais jamais avec l'intention de cibler les deux. Je peux créer des scénarios où le même code peut générer des résultats différents en fonction de la base de données est utilisée.
Il se peut que mise en veille prolongée peut gérer cela, mais ce serait bien d'entendre s'il y a des problèmes connus.
Ken
La solution
avec mise en veille prolongée i recommande Hibernate Spatial , un prolongement qui supporte Mysql, Oracle et Postgre avec leurs extensions respectives SIG.
i quelques pièges rencontrés:
soit au courant, la configuration des dialectes n'était pas trivial de le faire correctement. assurez-vous que les dialectes ne sont pas reconfigurés pour chaque déclaration, comme il est arrivé à moi.
en fonction des caractéristiques de hibernatespatial que vous utilisez, vous risquez d'être verrouillé sur un numéro de version spécifique de mise en veille prolongée
vous pouvez utiliser l'api seul critère, hql ne sont pas directement pris en charge.
mon code à l'aide hibernatespatial ressemble à ceci:
if (query.getMaxDistance() != null && query.getCenter() != null) {
basicCriteria.add(SpatialRestrictions.within("coordinate", GeoidCircleFactory.circle(query.getCenter(), query.getMaxDistance())));
}
vous souffrez d'une partie des contraintes tout à fait dire PostGIS et d'autres sont sous. Je recommande de se détendre un peu de votre application a besoin de mieux adapter les possibilités de votre base de données. par exemple, les requêtes dans « l'espace d'angle » sont beaucoup plus faciles à faire que dans « l'espace euclidien ».
le code contenu dans GeoidCircleFactory semble assez effrayant ...:)
Autres conseils
En plus d'utiliser les dialectes et hiberne vous voulez un outil de gestion de création de base de données comme Liquibase qui permettra la création code à abstraire loin de la syntaxe spécifique des différentes bases de données.
poignées différentes bases de données Hibernate ciblant en utilisant son l'abstraction de Dialect. Vous n'avez pas besoin d'apporter des modifications à votre application elle-même que la configuration de mise en veille prolongée pour chaque base de données.
Vous pouvez spécifier dans votre configuration le dialecte à utiliser avec votre base de données ou pour permettre à Hibernate d'utiliser les paramètres du pilote JDBC pour déterminer le dialecte approprié.
Après le commentaire REÇUS, avez-vous regardé Mise en veille prolongée Spacial ? Il est une extension de mise en veille prolongée pour soutenir les données géographiques en fournissant les types Hibernate nécessaires et dialectes.