@Override public void visit(final LogicalNode node) { checkNotNull(node, "logical node"); final LogicalNode.Type type = node.getType(); final ParameterPredicateVisitor childVisitor = new ParameterPredicateVisitor(criteriaFactory, fieldExprFactory); node.getChildren().forEach(child -> child.accept(childVisitor)); switch (type) { case AND: criteria.add(criteriaFactory.and(childVisitor.getCriteria())); break; case OR: criteria.add(criteriaFactory.or(childVisitor.getCriteria())); break; case NOT: criteria.add(criteriaFactory.nor(childVisitor.getCriteria())); break; default: throwUnknownType(type); } }