2009-06-26 64 views
4

約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) 

還請添加引用,如果有任何...

+0

你真的混淆的事情,當你在每一行重新分配「標準」。考慮在變量聲明中使用final。 – whiskeysierra 2009-12-21 16:52:41

回答

5

應該是後者

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

對待你可以做

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

如果你想第一個解決方案

2

沒有優先規則(如在一種編程語言中或在CFG解析器),方法調用順序明確地確定的表達。

(A和B)或(C和d)必須被翻譯成:

import static org.hibernate.criterion.Restrictions.*; 
... 
criterion = or(and(A, B), and(C,D));