hibernate restrições e / ou ordem
Pergunta
pequenas perguntas sobre Restrictions.or e Restrictions.and
Se eu fizer algo como isto:
...
criterion = criterionA;
criterion = Restrictions.and(criterion, criterionB);
criterion = Restrictions.or(criterion, criterionC);
criterion = Restrictions.and(criterion, criterionD);
Será que isto vai ser tratado como:
(A and B) or (C and D) (following mathematical conventions)
Ou será que vai ser tratado na ordem em que foram adicionadas as restrições:
(((A and B) or C) and D)
Por favor, adicionar referências se houver algum ...
Solução
Ele deve ser tratado como o último
(((A and B) or C) and D)
Você poderia fazer
criterion = Restriction.or(Restrictions.and(criterionA, criterionB), Restrictions.and(criterionC, criterionD))
Se você quer a primeira solução
Outras dicas
não há regras de precedência (como em uma linguagem de programação ou em um analisador CFG), chamadas de método pedir inequivocamente determina a expressão.
(A e B) ou (C e D) tem de ser traduzido para:
import static org.hibernate.criterion.Restrictions.*;
...
criterion = or(and(A, B), and(C,D));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow