理想のO/Rマッパーの条件

正美氏の新刊が出る前に、考えられるところまで考えておこう。
最高の生産性とパフォーマンスをたたき出すO/Rマッパーの条件とは何か。
今見えているところでは

「テーブル=クラス」ではない
  • クラスをテーブルにマップするアプローチでは、stableなオブジェクトモデルとアプリケーションが要求するモデルが違うことから、"オブジェクト−オブジェクトマッピング"が必要になってしまう
「結果表=クラス」ではない
  • クエリの結果には「型」なんてない(結果表が持つアトリビュート・セットには無限のバリエーションがあり得る)から、結果表をいちいちクラスにマップしていると、同じプレゼンテーションロジックを持つクラスの数が爆発してしまう
Lazy Loadingしない
  • オブジェクトグラフを手繰りつつ、必要になったらSQLを発行する...という動作は嫌だ。2テーブルの情報を1画面に一覧する場合(社員テーブルと部門テーブルから社員一覧情報を作成する場合など)、本来1クエリで済むところ、発行するクエリの数が[表示行数+1]回になってしまう
SQLを自由に記述できる
  • EJB-QLやHQLのような擬似SQLを、生成されるSQLを想像しながら使うのは嫌だ
  • select一発で引けるものを、わざわざオブジェクトグラフを操作して集計したり絞込みしたり...なんて全然やりたくない。「みんなはSQLなんて知らなくてもいいよ!...その代わりEntity Beanを深く理解してね!」ではぜんぜんありがたくない


上記条件に合うO/Rマッパーって、今どんなのがあるのだろうか。