Hibernateをいじる(2)

さて、このシリーズの主役はHibernateです。

1.お題

Hibernateをいじる(2)

今回は、このようなドメインモデルを使います。
大学通信教育の履修管理システムです。
どの科目を、いつから勉強を始めて、いつレポートを出して、単位修得試験を受験して、それぞれの評価はどうで、単位をいくつ取ったか…ということを管理します。
クラスが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アプローチを採ります。また、敢えてツールは使わず、手作業で進めます。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。