jfluteです。こんばんは、N.Mikuさん。
SpringBootプロジェクトでのDBFlute導入ありがとうございます。
まずは前提の確認をさせてください。
そして、それぞれのケースケースで想定して実現可能性を追記していきますね。
project構成は以下のようなイメージで合ってますでしょうか?
|-projectA
| |-src/main/java // table_aとtable_cを使う
| | |-xxx
| | | |-ProjectAApplication.java // main()でSpringApplication.run()する
|
|-projectB
| |-src/main/java // table_bとtable_cを使う
| | |-xxx
| | | |-ProjectBApplication.java // main()でSpringApplication.run()する
|
|-projectC
| |-src/main/java // table_cを扱うクラスはこちらに置く
| | |- (AとBの共通ライブラリなのでrunは存在しない)
| |
| |-dbflute_xxxdb // たぶんDBFluteクライアントもここにある?
| |-mydbflute // DBFluteエンジンもここ?
(↑上記のイメージだと仮定して)
そして、やりたいこととしては...
通常だと projectC にDBFluteの自動生成クラスがすべて生成されて、
projectAもprojectBもどのテーブルを使うことができるという感じになるところを...
projectAしか使わないテーブルの自動生成クラスはprojectAに生成、
projectBしか使わ...(同じ)
つまり、間違って projectA が table_b を使ってしまうとかがないように、
コンパイルレベルでブロックしたいということになりますでしょうか?
(↑上記のイメージだと仮定して)
今まで経験した現場だと、多少projectごとに「このテーブル使う使わない」がありますが、
「どれがどれを使う使わないを明確にして洗い出すのも大変」でしょうし、
「いま使ってなくてもいつ使うかわからない」ということもあり、
厳密に防ぐという話になることはありませんでした。
また、テーブル間でリレーションシップを持ってると、
テーブル間のEntityで相互参照が必要になるので、
自動生成先を分離するのはコンパイル言語として難しくなります。
例えば、table_a が table_c をFK参照している場合、TableA entity が TableC entity を参照します。
そこは大丈夫にしても、TableC entity も TableA entity をone-to-manyとして参照するので、
同じプロジェクトにいないとコンパイルを通すことができません。
その場合、コンパイルレベルでのブロックは諦めて、
アプリ実行時に「projectAがtable_bのBehaviorを使ったエラー」
というような実行時レベルチェックで割り切るとかの方が現実的かなとは思いました。
(これは比較的簡単に実装できるとは思います。実装方法は一旦置いておいて)
(↑リレーションシップの切れ目で綺麗に分けられる場合)
例えば、table_aグループ, table_bグループ, table_cグループという単位で、
同じDBスキーマ上でもリレーションシップ的な関わりが一切存在しないとかであれば...
DBFluteクライアントをprojectA, projectB, projectCごとに分けて運用するという方法も
できなくはないかもです。(やったことはないのでまだ想像ですが...)
ちょっと自動生成のライフサイクルなどが面倒になるかもしれないのと、
ConnectionPoolやTransactionどうする?という面がまたややこしいかもしれません。
なので、切れ目で綺麗に分けられる場合でも、
実行時レベルチェックの方が現実的だとは思います。
ただ、プロジェクト規模がものすごく大きくて、
コンパイルレベルでの制御に費用対効果が期待できるなら分割もアリだとは思います。
(↑そもそもそれぞれスキーマごとに違う場合)
例えば、table_aグループのテーブルと他のグループのテーブルが、
同じDBスキーマではなく、別のDBスキーマとかであれば、
どちらかというとDBFluteはスキーマごとにDBFluteクライアントを作成する、
(スキーマごとに自動生成をする)というスタイルになっていますので、
先述のDBFluteクライアントをプロジェクトごとに分けるやり方で良いと思います。
「あともうちょいこういう機能があったら実現できるのに」ってなったら、
今のDBFluteを修正することもできますので、ぜひ問題の整理をさせて頂ければと。