docs: @Override
  	public String process(String query, Map<String, Object> params) {
  		Map<String, Object> temp = new HashMap<>();
  		List<String> paramsInQuery = NamedParameterStatement.findParamsInQuery(query, false);
  
  		for (Map.Entry<String, Object> entry : params.entrySet()) {
  			if (entry.getKey().startsWith(specialParamPrefix)) {
  				logger.debug("ObjectNavigationPlugin: param found [{}]", entry.getKey());
  
  				String sentParam = entry.getKey() + propertyNavSplitChar;
  				for (String paramInQuery : paramsInQuery) {
  					if (paramInQuery.startsWith(sentParam)) {
  						String[] props = paramInQuery
  							.substring(sentParam.length() - 1)
  							.split(propertyNavSplitCharRegex);
  
  						Object value = entry.getValue();
  
  						for (String prop : props) {
  							if (value != null && prop.trim().length() > 0) {
  								if (innerCollectionNavigation) {
  									if (value instanceof Collection) {
  										List<Object> list = new ArrayList<>();
  										for (Object elem : (Collection) value) {
  											list.add(ObjectUtil.getPropertyValue(elem, prop, forceUnknownProperty));
  										}
  										value = list;
  									} else if (value.getClass().isArray()) {
  										List<Object> list = new ArrayList<>();
  										for (Object elem : (Object[]) value) {
  											list.add(ObjectUtil.getPropertyValue(elem, prop, forceUnknownProperty));
  										}
  										value = list;
  									} else {
  										value = ObjectUtil.getPropertyValue(value, prop, forceUnknownProperty);
  									}
  								} else {
  									value = ObjectUtil.getPropertyValue(value, prop, forceUnknownProperty);
  								}
  							}
  						}
  						temp.put(paramInQuery, value);
  					}
  				}
  			}
  		}
  
  		logger.debug("ObjectNavigationPlugin: set params [{}]", temp);
  
  		params.putAll(temp);
  
  		return query;
  	}