Frage

Hat jemand keine Erfahrung mit Datenbank-agnostische Anwendungen in Java zu schaffen, vor allem mit Hibernate und Oracle und Postgres-Datenbanken gleichzeitig Targeting?

Insbesondere Ich betrachte Oracle Spatial und PostGIS. Wir wollen eine Java-basierte SOA schaffen, die mit beiden Oracle Spatial und PostGIS Backends verwendet werden können. Ich habe Hibernate mit diesen beiden Datenbanken verwendet, aber nie mit der Absicht, die beide Targeting. Ich kann Szenarien schaffen, in dem der gleiche Code kann unterschiedliche Ergebnisse erzeugen je nachdem, welche Datenbank verwendet wird.

Es ist vielleicht, dass Hibernate kann damit umgehen, aber es wäre schön, zu hören, wenn es irgendwelche bekannten Probleme sind.

Ken

War es hilfreich?

Lösung

zusammen mit Hibernate kann ich Hibernate Spatial empfehlen, eine Erweiterung, die MySQL, Oracle und Postgre unterstützt, mit ihre jeweiligen GIS-Erweiterungen.

einige Tücken i aufgetreten:

beachten, die Konfiguration der Dialekte nicht trivial war richtig zu tun. sicherstellen, dass die Dialekte sind nicht für jede Anweisung neu konfiguriert, wie es mir passiert ist.

in Abhängigkeit von den Merkmalen von hibernatespatial Sie verwenden Sie können auf eine bestimmte Versionsnummer von Hibernate erhalten gesperrt in

Sie können die Kriterien api verwenden NUR wird hql nicht direkt unterstützt.

mein Code hibernatespatial mit sieht wie folgt aus:

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

Sie werden von einigen der ganz schlimmen Zwänge postgis leiden und andere sind unter. Ich würde empfehlen, einige Ihre Anwendung entspannen muss besser die Möglichkeiten Ihrer DB passen. beispielsweise Abfragen in „Winkelraum“ sind viel einfacher zu tun, als in „euklidischen Raum“.

Sie den Code in GeoidCircleFactory enthalten sieht ziemlich beängstigend ...:)

Andere Tipps

Neben überwintert Dialekte verwenden Sie eine Datenbankerstellung Management-Tool wollen wie Liquibase die die Schaffung ermöglichen Code aus der spezifischen Syntax der verschiedenen Datenbanken abstrahiert werden.

Hibernate Targeting Griffe verschiedene Datenbanken mit seinem Dialect Abstraktion. Sie müssen nicht selbst für jede Datenbank nur die Hibernate-Konfiguration keine Änderungen an der Anwendung machen.

Sie können entweder in Ihrer Konfiguration den Dialekt spezifizieren mit Ihrer Datenbank zu verwenden oder erlauben Hibernate die JDBC-Treibereinstellungen zu verwenden, um den entsprechenden Dialekt zu bestimmen.

Nach dem Kommentar empfangen, haben Sie sehen Spacial Ruhezustand? Es ist eine Erweiterung geografische Daten zu unterstützen, um Hibernate durch die notwendigen Ruhearten und Dialekte bereitstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top