さて、このシリーズの主役はHibernateです。
1.お題
今回は、このようなドメインモデルを使います。
大学通信教育の履修管理システムです。
どの科目を、いつから勉強を始めて、いつレポートを出して、単位修得試験を受験して、それぞれの評価はどうで、単位をいくつ取ったか…ということを管理します。
クラスが5つ。関連は1対1と、1対多の2種類があります。
Hibernateのサンプルとしては、継承がないのが残念ですが、これは後でいくらでも拡張できるでしょう。
例えば、Subject(科目)には、必修/選択必修/選択とか、一般教育科目/専門教育科目などの種類があります。継承のネタにはなりそうです。
今回は、初歩のサンプルですから、これで行きます。
2.Hibernateを使うためのアプローチ
Hibernateを使うためには、いくつかのモノが必要です。
まず、Hibernate自体の設定ファイルが必要です。
何らかのドメインモデルを、Hibernateを使って永続化するには、ドメインオブジェクト(もしくはテーブル)毎に、以下の種類のモノが必要となります。
- JavaBeans(Study.class)
- マッピングファイル(Study.hbm.xml)
- RDBテーブル(Studyテーブル)
ところで、この3つのうち、何からどうやって作っていくか…には、いくつかのアプローチがあります。
(1)ドメインモデルありき
つまりJavaBeansはあるので、それを元にテーブルとマッピングファイルを作っていきます。これを、Top-Downアプローチと言います。
とても、オブジェクト指向な感じですね。
このアプローチなら、XDocletでJavaBeansからマッピングファイルを作り、Hibernateの機能でマッピングファイルからテーブルを作ることが出来ます。
(2)テーブルありき
テーブルは既にあるから、それを元にJavaBeansとマッピングファイルを作ります。これを、Bottom-Upアプローチと言います。
多くの開発プロジェクトは、これになりそうな気がします。
このアプローチなら、Middlegenというツールを使って作業を自動化できます。
(3)マッピングファイルから作ろう!
逆説的な気もしますが、マッピングファイルを先に作ります。そこから、JavaBeansとテーブルを作っていきます。これを、Middle-Outアプローチと言います。
「マッピングファイル=Hibernateで出来ること」ですから、Hibernateを骨の髄までしゃぶるなら、これかもしれません。
定義がしっかりしているだけに、このアプローチをベースにした、開発ツールとか作れそうですね。
(4)マッピングファイルを作ることが面倒だ!
JavaBeansもテーブルもある。しかし、マッピングファイルだけない。だから、最後にマッピングファイルを作ろうというもの。これを、Meet-in-Middleアプローチと言います。
顧客にはテーブルで説明しないといけない、でも設計はオブジェクト指向で進んでいる…中途半端だけど、最もありそうなケースかもしれません。
今回は、既にドメインモデルがありますから、Top-Downアプローチを採ります。また、敢えてツールは使わず、手作業で進めます。