S2DAO外部SQLファイルにおけるinner join

ではなぜ所属情報が取れていないのだろう。原因として以下のような推測がされる。

  • joinを実現するための設定・記述が足りない
  • 実はこのやり方では実現できない
  • HSQLでは使えない
  • 実はサポートしてない

まぁ、この場合はどう考えても一番上から調べるのが正しいよな。

ということでソースを追っかけながら、どうやって外部ファイルのSQLを取得しているのかを探る。
ORDERアノテーションについて探った時、だいたいの流れを見たので調べるところも見当がついている。
クサいのはDaoMetaDataの実装であるDaoMetaDataImpl#setupSqlCommand()である。
ということでその辺りにブレークを張って追いかける。
すると、setupSqlCommand()内で呼ばれているprivateメソッドsetupMethod()内で命名規約に沿ったsqlファイルが存在するかを判定し、存在するならファイルの中を呼んでSQLコマンドとしていることが分かった。
つまり、この場合は書かれたSQLが全てであるので「SQLを実行して引けないのなら引けない」が正しいようだ。
よって、実はこのやり方(外部SQLでネストされた結果を取得したい)では実現できないという事らしい。
id:yuki_neko_nyan(師匠)が「ちょい前にMLでそんな情報が流れなかったっけ」というので探ってみる。
すると8/24のMLにこんな記述をみかけた。

  • 関連データ取得制限
    • 複数のオブジェクトが連鎖的に関連している場合、取得するオブジェクトの数(深さ)を制限できるか?
  • →現在のS2Daoにはキャッシュ、遅延ロード、関連データ取得制限の機能はありません

なるほど、つまりS2DAOではネストされた結果は取れないようだ。じゃこの問題は例題のSQLがまずかったという事で片付けます。

今日は夜id:habuakihiroさんの話を聞きに渋谷に行くのだが、予習をしないとマズいのでSeasarはここまでで。