JPAの考え方

HibernateとS2DaoとS2JDBCの考え方

本当はその上のエントリが気になったけど、SeasarにはSeasarの考え方があると思うので別にいいかな、と思ったのでやめ。

JPAは一般的なO/Rマッパで採用されているData Mapperパターンによるものです。エンティティクラスはテーブルと1対1に対応し、ロジックは層が違うと考えるのです。

ビジネスロジック等はエンティティクラスには通常現れません。継承等はテーブルの連結など継承戦略として定義されていますので、あくまでもオブジェクトとテーブルのマッピングに専念します。とはいえ、ツールによる生成を期待しているので継承を考えることはまずないですし、インピーダンスミスマッチはおきません。

パフォーマンスを出したい場合はNewコンストラクタ式によるDTO生成を行います。連結先も自由自在です。コンストラクタのみでなくプロパティによるセットのモードもあればよかったのですが、これで困ることはほとんどないのでよしとします。さらに言えばネイティブSQL時にこの機能がほしかった。

NetBeansの新規作成のウィザードにセッションビーンによるエンティティクラスのファサードクラスを生成する機能があります。ここにビジネスロジックをかいていけば、基本的にドメインとエンティティを1:1のように扱うことが可能です。わざわざウィザードが用意されているということで、おそらくNetBeansはそういう思想なのだと思います。「ActiveRecordパターンのような扱い方を目指した」というよりは、EJB3によるDIがファサードパターンやサービスロケータ等を生成するのに向いているからこそ、なのだと思います。

ただ、自動生成されるファサードのfindメソッドはObject型ではなく、エンティティのidの型を自動で引っ張ってきてほしかったですが。


S2JDBCJPAの考え方をベースに、SQLをより前面にだしてラッパー度が低い自由に扱いやすくしたもの、という感じがします。でーたを追加する際にJPAのpersistではなくinsertとなってることからもそれが伺えます。RowMapとかよくある高速開発に必要な実装もあったりで安心感があります。ちゃんと存在しないキーの場合例外を発行するというこれまたよくある一般的な実装なのですが、それだけにこれも助かります。いいものは積極的に取り込むという姿勢は賛成です。今後はツール等のサポート充実に動くようですのでこれからが見ものでしょう。現状ではツールや環境等がしっかりサポートしているJPAから積極的に乗り換えるメリットが少ないのです。


問題はS2JDBCで検索すると http://s2container.seasar.org/ja/s2jdbc.html がトップにひっかかるのでxmlさわりたくねーとなりやすいことでしょうか(もはやライブラリと何の関係もない)。しかも、Seasar2のトップページからS2JDBCというリンクが見つからない。まさか、コンテナ本体の中に入っているとは誰も思わないでしょう。また、コンテナの中に入ってしまうと、プロジェクト選択のホームへのリンクが見つかりません。タブブラウザが常識となった今、新しいタブで移動するのが普通ですのでURLを削る作業等が面倒になったりします。

はい、どんどん脱線してますね。

脱線ついでに、Seasar2が海外で受けてない理由は英語のページがまったく更新されてないことにあるのではないでしょうか。2008年になった現在、2006年の情報が新着情報としてのこったままです。よく言われることですが、更新されていない新着情報ならばないほうがましというやつですね。Seasar2は開発が終了したのかと思ってしまう可能性があります。