iBatis で正常なクエリなのにエラーになる - Printable Version +- Curl Global Community (https://communities.curl.com) +-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1) +--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2) +--- Thread: iBatis で正常なクエリなのにエラーになる (/showthread.php?tid=1029) |
iBatis で正常なクエリなのにエラーになる - umemura - 01-16-2014 Curl に直接関係する問題ではないのですが、 サーバ側で、DBにアクセスする際に、iBatis を利用しており、 同一の SQL-ID を利用しているのに、初回はうまくいき、 2回目はエラー(java.sql.SQLException: Column not found:)になる、 という現象が起きています。 対象のSQLは、集約条件をパラメタで渡すようなSELECT文なのですが、 発行されたSQLをログ出力し、そのSQLをツール(SQL Developer)で流してみると、 問題なく結果が返却されます。 SQL文自体が正常ということは、利用しているiBatis のバグなのかな、 と思うのですが、同様の問題は、他のCurl 案件で起きていないでしょうか。 RE: iBatis で正常なクエリなのにエラーになる - umemura - 01-16-2014 エラーになるSELECT文は、条件に応じて項目数が動的に変わるため、 検索結果(iBatis でいうところのresultClass)をHashMap にしていますが、 初回と、2回目で集約条件となるパラメタを変更しています。 どうやら、以前のクエリ発行時に作成したHashMap を、iBatis側でキャッシュしているため 初回にキャッシュしたHashMpaに対して、 2回目で取得した項目をセットしようとしたとき、 検索結果の項目数に差があると、 キャッシュしているHashMap に対してキーがないため、エラーになる、ということのようです。 とりあえず、項目の増減が発生しないように、すべての項目をハッシュのキーに指定するようにし、 利用しない項目については、値をnullにして判断するよう修正して対応しました。 iBatisの設定として、select タグに remapResults="true" を設定すれば、キャッシュをクリアしてくれるようですが、 こちらはまだ試していないです。 http://www.sorich.jp/blog/shimamura/2008/11/ibatisselect.html |