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はここまでで。