code: @SuppressWarnings({ "rawtypes", "unchecked" })
      private Predicate[] analyzeParamMap(CriteriaBuilder criteriaBuilder, Root from, Map<String, Object> param) {
          List<Predicate> predicates = new ArrayList<Predicate>();
  
          for (Map.Entry<String, Object> entry : param.entrySet()) {
              String key = entry.getKey();
              Object value = entry.getValue();
              if (key.equals("timestamp")) {
                  predicates.add(criteriaBuilder.le(from.get("timestamp"), (Long) value));
              } else if (key.equals("committer")) {
                  predicates.add(criteriaBuilder.equal(from.get("committer"), value));
              } else if (key.equals("context")) {
                  predicates.add(criteriaBuilder.equal(from.get("context"), value));
              }
          }
          Predicate[] temp = new Predicate[predicates.size()];
          for (int i = 0; i < predicates.size(); i++) {
              temp[i] = predicates.get(i);
          }
  
          return temp;
      }
docs: Analyzes the map and filters the values which are used for query