Jooq:データベース名称を指定させない方法



jOOQによってコードジェネレーションを行うと、デフォルトではジェネレートされたコード中に「データベース指定」が行われているようだ。このために生成されるSQL文にもデータベース指定がされている。

これは非常に問題である。なぜなら、開発時にはdevelopという名前のデータベースを対象にしていても、本番時にはproductionという名前のデータベースにしたいかもしれないからだ。データベースの名称を変更したら、わざわざコードジェネレーションもし直さねばならないのでは面倒過ぎる。

※ただしこれは、MySQLのような一つの接続先に複数のデータベースが存在する場合のみらしい。一つの接続先に単一のデータベースしか存在しないFirebirdが相手の場合にはこの問題は発生しないようだ。

以下に解決策があった。

いくつかの提案があるのだが、最も簡単なものは、outputSchemaToDefaultによるものだ。

outputSchemaToDefaultを使う方法

以下のように読み込みデータベースにはdevelopを指定するが、outputSchemaToDefaultというフラグをtrueにしてやる。

<configuration>
  <generator>
    <database>
      <schemata>
        <schema>
          <inputSchema>develop</inputSchema>
          <outputSchemaToDefault>true</outputSchemaToDefault>
        </schema>

このフラグを設定すると、たしかに生成コードからはデータベースの名称のクラスが消え、レコード等の生成クラスからもデータベース参照が消えている。

スキーママッピング機能を使う方法

データベース参照はそのままにしておき、実行時にスキーマをマッピングする方法がある。

これは、先の記事に方法があるのだが、正直なところ、どのような場合にこれが有用なのかわからない。outputSchemaToDefaultによる解決法で十分な気がするのだが。。。。