ローカルの 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.SupportJavadoc を検討してください。この注釈は、すべての 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);