ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2JDBCの自動生成

S2JDBCの自動生成サポートは、2つ考えています。1つは、データベースの情報から、Entityを作る機能。これは、おもにDBAがいる開発現場向きの機能です。
作るEntityは、GenerationGapパターンで作ります。例えば、従業員用のEntityの場合、AbstractEmployeeにカラムに関するマッピング情報を実装します。
Employeeクラスは、AbstractEmployeeクラスを継承し、関連の情報と、そのEntity特有のビジネスロジックを実装するようにします。
最初は、EmployeeとAbstractEmployeeの両方のクラスを作成しますが、テーブルの定義が変更された場合は、AbstractEmployeeだけが更新されます。
DBAのいる開発現場向きと書きましたが、すでにスキーマが定義されている場合の初期のEntityを定義する場合も使えるでしょう。
2つ目は、Entityからスキーマ定義を更新する機能。Railsマイグレーションとは違います。Javaの場合、Railsみたいに差分情報を書いていくのではなく、Entityの定義そのものを直接書き換えたほうが、Javaっぽいきがします。
そして、マイグレーションする場合、最初に既存データをExcelに保存し、全てのテーブルを削除します。Entityの定義に従って外部キー以外の定義を作成して、Excelのデータをインポートします。最後に、外部キーを全て張りなおします。
データベースのバージョンは、マイグレーションの中で管理するのではなくて、Subversionなどで管理するイメージ。Entityの定義は、Entityを利用するほかのクラスと密接に結びついているんだから、Javaのクラスと同様にバージョン管理するのが自然だと思っています。
2つ目の自動生成は、開発者が自由にデータベースの定義をできるプロジェクト向けです。どっちも必要なんじゃないかと思っています。