This is a cache of http://dbflute.seasar.org/ja/environment/upgrade/migration/migrate0971to0972.html. It is a snapshot of the page at 2024-11-13T00:11:45.078+0000.
移行 0.9.7.1 to 0.9.7.2 | DBFlute

移行 0.9.7.1 to 0.9.7.2

お約束の注意点

古いバージョンの削除
古いバージョンのDBFluteランタイム(JAR)が[web-INF/lib]の下などに残らないように
タスクを実行し忘れないように
Generateタスクだけでなく、(外だしSQLがある場合は)Sql2Entityタスクも実行

環境上の注意点

非等値の演算子が "!=" から "<>" へ

ConditionBeanで発行されるSQLの非等値の演算子が、"!=" からSQLの標準である "<>" に変わりました。この変更での問題は想定されませんが、万が一、元に戻したい場合は、littleAdjustmentMap.dfprop にて isMakeConditionQueryNotEqualAsStandard を false に設定して下さい。

実装上の注意点

条件なしの一件検索は例外

Behaviorの selectEntity(CB) において、絞り込み条件の全くない ConditionBean を指定したときに、明示的な例外が発生するようになりました。ConditionBean の一件検索は、一つ以上の where 句に入る条件、もしくは、fetchFirst(1) が必ず必要です。 (外だしSQL以外の)他の一件検索も同様です。

e.g. selectEntityで条件なし (例外) {MEMBER} @Java
MemberCB cb = new MemberCB();
memberBhv.selectEntity(cb); // exception
e.g. selectEntityで無効な条件設定で条件なし (例外) {MEMBER} @Java
MemberCB cb = new MemberCB();
cb.query().setMemberId_Equal(null);
memberBhv.selectEntity(cb); // exception
e.g. selectEntityで有効な条件設定で条件なし (正常動作) {MEMBER} @Java
MemberCB cb = new MemberCB();
cb.query().setMemberId_Equal(3);
... = memberBhv.selectEntity(cb);
e.g. selectEntityで最初の一件だけをフェッチ (正常動作) {MEMBER} @Java
MemberCB cb = new MemberCB();
cb.fetchFirst(1);
... = memberBhv.selectEntity(cb);

これは改善点で、そもそも条件のない ConditionBean を指定するなどして、selectEntity() の実行で複数件の結果が戻ったときは明示的な例外になっていましたが(フェッチの段階でのチェックなのでこれもできるだけ早い段階での検知としていますが)、 さらに今回の修正により、検索に入る前にチェックが掛かるようになり、より早い段階での例外による検知が可能になりました。例えば、1000 万件のテーブルに対する selectEntity() で間違って無効な条件が入って全件検索になってしまう場合に、長いSQLが戻ってくる前に例外になります。