Seasar2に続き、Hibernate3を試してみました。
公式サイトのマニュアルと、バージョンは違うものの@ITの記事「Hibernateで理解するO/Rマッピング」を参考に、昨日、S2DAOで実験したGroupUnitとMemberの簡単なモデルで実験。
公式サイトのマニュアル(英語ですが)のサンプルソースを参考に、JavaBeansを2つ(GroupUnitとMember)、マッピングファイル、Hibernateの設定ファイルを作成。
それで・・・、
- 単純なGroupのInsert
- 単純なGroupのSelect(List)
- N:1関連のSelect
- Groupを持つMemberのInsert
- 1:N関連のSelect
- Memberが持っているGroupを変更後Update
といった内容の実験を行いました。
細かい部分の実験はやっていませんが、上記のシンプルな実験は、すべて成功。
お手軽なS2DAOと違ってきちんとしたマッピングファイルが必要になりますが、その分、機能は充実しています。1:N関連がサポートされているし、Groupを持つMemberのInsertの件も、RDB上での外部KEYを意識することなく(マッピングファイルには書く必要がありますが、プログラムでは意識不要)、対応できます。カッコイイ。
Updateの実験では、トランザクションの実験を兼ねてみました。これもcommit、rollbackとも整然と動いてくれます。ただ、rollbackしても同じSession内だと、Query使って再取得してもrollbackされていませんね。別Sessionにすると、ちゃんとrollbackされた内容が反映されます。
おそらく、マッピングファイルが肝だなぁと思いました。この文法がきっとHibernateで出来ることのすべてなんだろうし、真のOOD、OOPをやるために必要な機能は、おそらくすべて揃っているのだろうし・・・。全体の把握はなかなか大変でしょうが、把握しなければうまく使えないのではないかと。
昨日のS2DAOといい、今日のHibernateといい、永続化部分の実装を全部人間がやるのは、いまやナシなんだなと実感しました。
あと、公式サイトの設定ファイルサンプルをそのままコピペすると、動かすたびにDROP TABLEとCREATE TABLEされます。マッピングファイルからDDLを作れるわけですが、勝手にテーブルを消したり作ったりまでやっちゃいます。実験用のサンプルだからでしょうが、コピペするだけで中身を見ないと、ハマります。ご注意を。