Можно использовать 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);
Вы никогда не должны разрабатывать на СУБД, которая отличается от вашей производственной СУБД. Есть гораздо больше (тонкие) отличия, чем просто синтаксис, который вы просто не можете учитывать. –
Я не знаю, оракул на моей машине, и я так не думаю. Hibernate делает это с помощью управления диалектами. – 2013-03-19 16:19:06
Это намного больше, чем просто «диалект» (и я не вижу смысла в использовании JOOQ, когда вы уже используете ORM, например Hibernate). –