CSVファイル作成のSQLも画面のSQLと同じにしたい。
けど、一度に数千件とか数万件のオブジェクトは作りたくない。
ページングなんてやってたらむちゃ遅い。
ということで、フェッチのサイクルで処理するには?と考えてみた。
いろいろ備忘録日記 > iBatis奮闘記-0009 (RowHandlerの使用)
を参考にさせて頂き、すんなり実装できてOK!
ありがとうございました。
で、iBATISに依存したくないので、抽象化したインターフェースを作ってラップすることに。
public interface IFetchProcess { /** * フェッチ処理<br> * @param * obj フェッチで取得したオブジェクト<br> */ public void fetchProcess(Object obj); }
抽象化っても、iBATISのRowHandlerと同じなんだけどねw
DAOの実装以外は、IFetchProcessで取り回すことでイイ感じに。
ところが、iBATISからフェッチのサイクルで、RowHandlerのhandleRowメソッドが呼ばれる中で、iBATISで別のSQLを発行するとエラーになっちゃう!
場合場合でExceptionが違うけど、型が違うとか配列のサイズが違うとか、概ね「フェッチ中は違う結果は受け付けれんのじゃ!」という感じのException。
んんん?複数のSQLのフェッチって、その分コネクションが必要ってことか???
ということで、iBATISのフェッチのサイクルの処理に入る前に、事前に必要な情報をかき集めておいてから呼び出すことで解決。
こんなにバタバタすんじゃったら、も少し前にやっとくべきじゃったorz
というか、なんかそれこそパターンが欲しいwww
S2DAOには、Fetch JoinとかFetch Loadingってのがあるけど、フェッチしてる最中のオブジェクトの関連ってどうなっとんじゃろうな???
フレームワーク側でコントロールしたい場合、GCで残ってもらうのがイヤな場合は、参照の種類を使って、オブジェクトの関連を制御してやればよさげ?
でも、途中でオブジェクトの関連がなくなるのも困り物?