SQLのクエリを作る時の注意点

JavaでExpressionを使ってSQLを生成するときの注意点です。

NGパターン

             Expression exp = null;
             List<Expression> exp1 = new ArrayList<Expression>();
             List<Expression> exp2 = new ArrayList<Expression>();

             //exp1,exp2には適宜要素を入れる
              for (int k = 0; k < exp1.size(); k++) {
                for (int l = 0; l < exp2.size(); l++) {
                    exp = exp.orExp(exp1.get(k).andExp(exp2.get(l)));
                }
               }

expはnullなので1発めにヌルポが発生します。

OKパターン

             Expression exp = null;
             List<Expression> exp1 = new ArrayList<Expression>();
             List<Expression> exp2 = new ArrayList<Expression>();

             //exp1,exp2には適宜要素を入れる
              for (int k = 0; k < exp1.size(); k++) {
                for (int l = 0; l < exp2.size(); l++) {
                  if (k == 0 && l == 0) {
                    exp = exp1.get(k).andExp(exp2.get(l));
                  } else {
                    exp = exp.orExp(exp1.get(k).andExp(exp2.get(l)));
                  }
                }
               }