我想SELECT
使用 Ibator 生成的示例类执行几个条件。
如使用说明中所述,它非常易于使用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 个不同的 Criteria。
这对我来说似乎很荒谬,所以我认为必须有更好的方法。有人可以提出一些建议吗?