5

关于 Restrictions.or 和 Restrictions.and 的小问题

如果我做这样的事情:

...
criterion = criterionA;
criterion = Restrictions.and(criterion, criterionB);
criterion = Restrictions.or(criterion, criterionC);
criterion = Restrictions.and(criterion, criterionD);

这将被视为:

(A and B) or (C and D) (following mathematical conventions)

还是会按照添加限制的顺序进行处理:

(((A and B) or C) and D)

如果有任何参考,也请添加...

4

2 回答 2

6

应视为后者

(((A and B) or C) and D)

你可以做

criterion = Restriction.or(Restrictions.and(criterionA, criterionB), Restrictions.and(criterionC, criterionD))

如果你想要第一个解决方案

于 2009-06-26T09:47:09.573 回答
2

没有优先规则(如在编程语言或 CFG 解析器中),方法调用顺序明确确定表达式。

(A 和 B) 或 (C 和 D) 必须翻译成:

import static org.hibernate.criterion.Restrictions.*;
...
criterion = or(and(A, B), and(C,D));
于 2009-06-26T09:47:13.117 回答