ローカルの HSQLDB (DBMS) から Jooq を使用して API を生成しました。そして、テストは正常に実行されます。しかし、MySQL などの別の DBMS でテストを実行しようとすると、例外が発生します。また、MySQL によって生成された API 属性は大文字と小文字が区別され、HSQLDB では区別されないことがわかりました。
私の質問: Jooq ローカルで HSQLDB を使用して開発し、Oracle または MySQL でライブ システムを実行することは可能ですか?
複数のデータベースで jOOQ を使用することが可能です。私が知っているjOOQ ユーザー グループの最も「大胆な」ユーザーは、少なくとも 5 つの異なる (生産的な!) データベース システム (Oracle、SQL Server、Sybase) で jOOQ を使用しています。
ただし、jOOQ はデータベースをある程度抽象化するだけであることに注意してください。ベンダー固有の機能を使用するとすぐに、問題が発生する可能性があります。jOOQ は、レンダリングされたすべての SQL がすべてのデータベースで機能することを保証しません。標準化タスクを単純化するだけです。
HSQLDB と Oracle を組み合わせようとしているため、問題のある機能には次のようなものがあります (他にも多数あります)。
DATE
データ型の異なる実装VARCHAR
/VARCHAR2
データ型FOR UPDATE
構文MERGE
構文INTEGER
データ型の欠如 (特にストアド プロシージャの場合)''
とNULL
は同じです)PIVOT
/UNPIVOT
節もちろん、機能が jOOQ によって明示的にサポートされていない場合にも、非互換性は残ります。これらには(他の多くの中でも)次のものが含まれます。
MODEL
条項また、自己責任で
CREATE TABLE "MY_TABLE"...
(Oracle、HSQLDB) またはCREATE TABLE `MY_TABLE`...
(MySQL) と記述します)一方、jOOQ および jOOQ の SQL 抽象化機能を安全に使用できます。
詳細については、org.jooq.Support
Javadoc を検討してください。この注釈は、すべての API 要素で使用され、jOOQ が関連する方言で基礎となる SQL 句/関数をシミュレートできるかどうかを文書化します。
それとは別に、唯一の問題がテーブル名の大文字と小文字の区別である場合は、jOOQ の設定を通じて名前を引用しないように jOOQ に指示することを検討してください: http://www.jooq.org/doc/3.0/manual/sql-building/executor/カスタム設定/
例:
// This DSLContext will not render quoted table / column names:
Settings settings = new Settings().withRenderNameStyle(RenderNameStyle.AS_IS);
DSLContext create = DSL.using(connection, dialect, settings);