BitArts Blog

ロードバイク通勤のRubyプログラマで伊豆ダイバー。の個人的なブログ。

Hibernateボトムアップ開発プロセス

Hibernateの嬉しいところは、POJOなエンティティクラスをまず作って、そこからXDocletマッピングファイルを自動生成、さらにDBスキーマを自動生成。というトップダウンによる開発と、あるいはまったく反対に、既存のDBスキーマからマッピングファイルを自動生成、さらにエンティティクラスを自動生成。というボトムアップによる開発と、どちらでもokという点である。まっさらからの開発であれば、オブジェクトモデリングから入ってきて、トップダウンでDBに繋いでいくのが自然であるが、既に動いている非HibernateなDBシステムに繋ぎたいという場合は、ボトムアップを使えば楽ができる。

ということで、後者のような案件が出てきたので、色々試しているところです。具体的には、Middlegenというのを使って既存DBからマッピングファイルを自動生成、さらにそこからhbm2javaというのでエンティティクラスを自動生成する。どちらもantのタスクとして動作する。コマンド一発で永続化可能なクラスがバリバリ出来上がってしまうので気持ちいい。

ところが、生成されたクラスを使おうとしたら、net.sf.hibernate.PropertyNotFoundExceptionが発生した。色々調べてみると、どうやら、Middlegenが、たとえば「a_bcd_efg」 というフィールド名を「aBcdEfg」というプロパティ名にマッピングしてしまうようだ。何が悪いの?と一瞬思ったが、こういう場合は例外的に「ABcdEfg」というプロパティ名でなければならないというのがJavaBeansの仕様らしい。これに関してBTSバグ報告があがってた

しかし件のDBは、すべてこういう1文字プレフィックスが付いていたので、参った。まあテーブル数が少ないので手作業でマッピングファイルを直すかな。