Вопрос

Есть ли у кого-нибудь опыт создания приложений, не зависящих от базы данных, на Java, особенно с Hibernate, и одновременного таргетинга на базы данных Oracle и Postgres?

В частности, я рассматриваю Oracle Spatial и PostGIS.Мы хотим создать SOA на основе Java, который можно использовать как с серверными системами Oracle Spatial, так и с PostGIS.Я использовал Hibernate с обеими этими базами данных, но никогда не намеревался ориентироваться на обе.Я могу создавать сценарии, в которых один и тот же код может генерировать разные результаты в зависимости от того, какая база данных используется.

Возможно, что hibernate справится с этим, но было бы приятно услышать, есть ли какие-либо известные проблемы.

Кен

Это было полезно?

Решение

наряду с гибернацией я могу порекомендовать Переход в спящий режим Пространственный , расширение, которое поддерживает Mysql, Oracle и Postgre с их соответствующими расширениями GIS.

некоторые подводные камни, с которыми я столкнулся:

имейте в виду, что настройка диалектов не была тривиальной для правильного выполнения.убедитесь, что диалекты не перенастроены для каждого утверждения, как это случилось со мной.

в зависимости от функций hibernatespatial, которые вы используете, вы можете быть привязаны к определенному номеру версии hibernate

вы можете использовать ТОЛЬКО criterions api, напрямую hql не поддерживается.

мой код, использующий hibernatespatial, выглядит следующим образом:

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

вы будете страдать от некоторых довольно серьезных ограничений, с которыми сталкиваются postgis и другие.я бы рекомендовал ослабить некоторые потребности вашего приложения, чтобы лучше соответствовать возможностям вашей базы данных.например, запросы в "угловом пространстве" выполнять намного проще, чем в "евклидовом пространстве".

код, содержащийся в GeoidCircleFactory, выглядит довольно устрашающе...:)

Другие советы

В дополнение к использованию диалектов гибернации вам понадобится инструмент управления созданием базы данных, такой как Ликвидационная База это позволит абстрагировать код создания от конкретного синтаксиса различных баз данных.

Hibernate обрабатывает таргетинг на различные базы данных, используя свой Диалект абстракция.Вам не нужно вносить какие-либо изменения в само ваше приложение, только в конфигурацию гибернации для каждой базы данных.

Вы можете либо указать в своей конфигурации диалект для использования с вашей базой данных, либо разрешить Hibernate использовать настройки драйвера JDBC для определения соответствующего диалекта.

После полученного комментария смотрели ли вы на Спящий режим Пространственный?Это расширение к Hibernate для поддержки географических данных путем предоставления необходимых типов и диалектов Hibernate.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top