4

ローカルの HSQLDB (DBMS) から Jooq を使用して API を生成しました。そして、テストは正常に実行されます。しかし、MySQL などの別の DBMS でテストを実行しようとすると、例外が発生します。また、MySQL によって生成された API 属性は大文字と小文字が区別され、HSQLDB では区別されないことがわかりました。

私の質問: Jooq ローカルで HSQLDB を使用して開発し、Oracle または MySQL でライブ システムを実行することは可能ですか?

4

1 に答える 1

4

複数のデータベースで jOOQ を使用することが可能です。私が知っているjOOQ ユーザー グループの最も「大胆な」ユーザーは、少なくとも 5 つの異なる (生産的な!) データベース システム (Oracle、SQL Server、Sybase) で jOOQ を使用しています。

ただし、jOOQ はデータベースをある程度抽象化するだけであることに注意してください。ベンダー固有の機能を使用するとすぐに、問題が発生する可能性があります。jOOQ は、レンダリングされたすべての SQL がすべてのデータベースで機能することを保証しません。標準化タスクを単純化するだけです。

HSQLDB と Oracle を組み合わせようとしているため、問題のある機能には次のようなものがあります (他にも多数あります)。

  • Oracle のDATEデータ型の異なる実装
  • Oracle の分析関数
  • Oracle の下位VARCHAR/VARCHAR2データ型
  • Oracle の拡張FOR UPDATE構文
  • Oracle の拡張MERGE構文
  • HSQLDB の配列型とは対照的に、Oracle の厳密に型指定された名前付き配列型
  • Oracle の明示的なINTEGERデータ型の欠如 (特にストアド プロシージャの場合)
  • パッケージと UDT に対する Oracle のサポート
  • Oracle の空の文字列サポートの欠如 (''NULLは同じです)
  • Oracle のパーティション化された外部結合
  • Oracle のPIVOT/UNPIVOT

もちろん、機能が jOOQ によって明示的にサポートされていない場合にも、非互換性は残ります。これらには(他の多くの中でも)次のものが含まれます。

  • オラクルのAQ
  • オラクルのMODEL条項

また、自己責任で

  • すべてのデータベースで同等のメタデータを維持する (疑わしい場合は、大文字と小文字を区別するテーブル/列名を使用します。つまり、CREATE TABLE "MY_TABLE"...(Oracle、HSQLDB) またはCREATE TABLE `MY_TABLE`...(MySQL) と記述します)
  • すべてのデータベースで同等のデータ型とデータを維持する

一方、jOOQ および jOOQ の SQL 抽象化機能を安全に使用できます。

  • ほとんどの機能
  • 複雑なネストされた SQL を含むほとんどの 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);
于 2013-03-19T20:56:25.083 に答える