SELECT
Ibatorで生成されたExampleクラスを使用して、いくつかの条件でを実行したいと思います。
ここで使用上の注意で説明されているように、複数の演算子を使用criteria.andFieldIsSomething()
して句example.or(example)
を作成するのは非常に簡単です。WHERE
OR
AND
私はこれを書くことができます:
example.createCriteria().andIntegerIsEqualTo(int).andDateIsEqualTo(someday);
example.or(example.createCriteria().andIntegerIsNull().andDateIsEqualTo(someday));
example.or(example.createCriteria().andIntegerIsEqualTo(int).andDateIsNull());
example.or(example.createCriteria().andIntegerIsNull().andDateIsNull());
しかし、最初に、それは一種の退屈で冗長であり、次のコードを出力します:
SELECT * FROM zeTable
WHERE (integer = int AND date = someday)
OR (integer IS NULL AND date = someday)
OR (integer = int AND date IS NULL)
OR (integer IS NULL AND date IS NULL);
よりエレガントな(そしておそらく効率的な)書き方は次のとおりです。
SELECT * FROM zeTable
WHERE (integer IS NULL OR integer = int)
AND (date IS NULL OR date = someday);
のテストでNULL
は、メソッドを効率的に使用できません。.andFieldSomethingIn(List values)
この例は単純にしていますが、作成する必要のあるコードは、そのような5つまたは6つのフィールドを交差させることを意味し、36の異なる基準に達する可能性があります。
これは私にはばかげているように思われるので、もっと良い方法があるに違いないと思います。誰かが何かを提案できますか?