現在の質問/コメントに対する回答:
同じタグを使用して、[データベース].[スキーマ].[テーブル] の 3 つの部分からなる完全修飾テーブル名を使用して、特定のデータベース内のオブジェクトのみにツールを制限できますか?
はい、<includes/>
and<excludes/>
要素は修飾名と非修飾名の両方に一致するため、たとえば除外できますdatabase.schema.table
(括弧を除外します)。
テーブル、ビュー、プロシージャ、関数などのオブジェクト タイプごとに包含/除外ルールを指定できるツールがあればいいのですが。
確かに、それはロードマップにある: #5263
可能であれば、テーブル/ビュー/プロシージャのクラスをまとめてまとめるのではなく、別々のパッケージに配置します。
ジェネレーター戦略で現在の動作をオーバーライドできます。
データベースの 1 つにスキーマがあり、生成されたコードは無効でした。\ が文字列の \ に生成されることを確認してください。
はい、<includes/>
および<excludes/>
要素 (コード ジェネレーター構成の他の多くの要素と同様) は、関連するすべてのセマンティクスを含む Java 正規表現を取ります。
実際の問題に対するより良い解決策:
jOOQ 3.9 では、コード ジェネレーターでカタログ/スキーマ マッピング機能を使用できます。それを構成するには、さまざまな方法があります。
1 つの入力カタログのみ (SQL Server がデータベースと呼ぶものの標準名)
これは、開始するための最も簡単な構成です。単一のデータベース内にすべてを生成します。
<configuration>
<generator>
<database>
<inputCatalog>database</inputCatalog>
...
生成された出力を、そのデータベース内の単一のスキーマのみにさらに削減できます。
<configuration>
<generator>
<database>
<inputCatalog>database</inputCatalog>
<inputSchema>schema</inputSchema>
...
複数の入力カタログ
より洗練されたセットアップ (またはプロジェクトの成長) では、より適切なアプローチは、すべてのカタログとスキーマを明示的にリストすることです。
<configuration>
<generator>
<database>
<catalogs>
<!-- This configuration generates everything inside of that catalog -->
<catalog>
<inputCatalog>database1</inputCatalog>
</catalog>
<!-- This configuration generates only some schemas inside of the catalog -->
<catalog>
<inputCatalog>database2</inputCatalog>
<schemata>
<schema>
<inputSchema>schema1</inputSchema>
</schema>
<schema>
<inputSchema>schema2</inputSchema>
</schema>
</schemata>
</catalog>
...
バックグラウンド:
デフォルトでは、jOOQ コード ジェネレーターは常に、表示できるものすべてを生成します。これを明示的に制限するには、次の 2 つの方法があります。
- コード ジェネレーターのカタログ/スキーマ マッピング機能
- 標準表現
<includes/>
と<excludes/>
正規表現(すべてのオブジェクトに適用されます)
jOOQ 3.8 では、複数のカタログ (SQL Server: データベース) のコード生成サポートが追加されましたが、カタログ マッピング機能による制限のサポートは追加されていません。これは、jOOQ 3.9 で修正され、カタログ マッピングが追加されました ( #4794 )。
#4794より前の唯一の回避策は<excludes/>
、不要なカタログからすべてのコンテンツを除外することでした。その結果、jOOQ 3.8 コード ジェネレーターは空のカタログのみを生成していました。
jOOQ User Group のこのディスカッションも参照してください。