2013-03-19 2 views
4

Я создал API с Jooq из локальной HSQLDB (СУБД). И тесты проходят нормально. Но я получаю исключения при попытке запустить тест с другой СУБД, такой как MySQL. Кроме того, я видел, что сгенерированные атрибуты API MySQL являются case sensitiv и HSQLDB нет.Является ли JOOQ сгенерированным api зависеть от СУБД?

Мой вопрос: возможно ли разработать с Jooq локальным с HSQLDB и запустить прямую систему с Oracle или MySQL?

+2

Вы никогда не должны разрабатывать на СУБД, которая отличается от вашей производственной СУБД. Есть гораздо больше (тонкие) отличия, чем просто синтаксис, который вы просто не можете учитывать. –

+0

Я не знаю, оракул на моей машине, и я так не думаю. Hibernate делает это с помощью управления диалектами. – 2013-03-19 16:19:06

+0

Это намного больше, чем просто «диалект» (и я не вижу смысла в использовании JOOQ, когда вы уже используете ORM, например Hibernate). –

ответ

4

Можно использовать jOOQ с несколькими базами данных. Самые «смелые» пользователи, известные мне из jOOQ User Group, используют jOOQ с по меньшей мере пятью различными (производительными!) Системами баз данных (среди которых: Oracle, SQL Server, Sybase).

Обратите внимание, что jOOQ будет лишь абстрактной вашей базы данных в определенной степени. Как только вы используете специфические для поставщика функции, у вас могут возникнуть проблемы. jOOQ не будет гарантии, что весь обработанный SQL будет работать на всех ваших базах данных. Это будет только упростить задачу стандартизации.

Поскольку вы пытаетесь объединить HSQLDB и Oracle, проблемные функции включают в себя (среди многих других):

  • отличается реализация Oracle, типа DATE данных
  • аналитические функции Oracle,
  • компании Oracle уступает VARCHAR/VARCHAR2 данные типы
  • расширенный синтаксис Oracle FOR UPDATE
  • расширенный MERGE синтаксис Oracle,
  • Oracle, сильно типизированных, названные типы массивов - в отличие от типов массивов HSQLDB в
  • отсутствие Oracle, явных INTEGER типов данных (в частности, для хранимых процедур)
  • поддержки Oracle, для пакетов и пользовательских типов
  • отсутствие Oracle в пустой поддержке строки ('' и NULL одинаковы) разделенный внешний
  • Oracle присоединяется к PIVOT/UNPIVOT положения
  • Oracle,

Конечно, несовместимость сохраняется также, когда функция не поддерживается явно jOOQ. Они включают в себя (среди многих других):

  • AQ Оракула
  • пункт Oracle, MODEL

Кроме того, вы ответственны сами за

  • Поддержание эквивалентных мета данных во всех базах данных (если есть сомнения, используйте имена таблиц/столбцов с учетом регистра, то естьнаписав CREATE TABLE "MY_TABLE"... (Oracle, HSQLDB) или CREATE TABLE `MY_TABLE`... (MySQL)
  • Сохранение эквивалентных типов данных и данных во всех базах данных

С другой стороны, вы можете спокойно использовать jOOQ и jOOQ по возможности SQL абстракции для

  • Большинство функций
  • Большинство Морозы SQL, в том числе сложного вложенного SQL

Для получения дополнительной информации, пожалуйста, обратите внимание на org.jooq.Support Javadoc. Эта аннотация используется во всех элементах API для документирования того, способен ли jOOQ моделировать базовое предложение/функцию SQL в соответствующих диалектах.

Кроме того, если ваша единственная проблема в том, чувствительность к регистру имен таблиц, рассмотрим говоря jOOQ не цитировать имена через настройки jOOQ в: http://www.jooq.org/doc/3.0/manual/sql-building/executor/custom-settings/

Пример:

// This DSLContext will not render quoted table/column names: 
Settings settings = new Settings().withRenderNameStyle(RenderNameStyle.AS_IS); 
DSLContext create = DSL.using(connection, dialect, settings); 
+0

Не говоря уже о том, что другие Oracle используют OFFSET & LIMIT. – Bnrdo

+1

@onepotato: это довольно хорошо обрабатывается jOOQ, рендерирование вложенных выборок и прозрачность фильтрации ROWNUM пользователю. Подробности можно увидеть здесь: http://www.jooq.org/doc/3.0/manual/sql-building/sql-statements/select-statement/limit-clause/ –

+0

Ничего себе, я этого не ожидал. Полезно знать спасибо. – Bnrdo

Смежные вопросы