code: public String createQueryStringFromNode(Node node, int position, @Nullable Class<?> domainType) {
  
  		StringBuilder query = new StringBuilder();
  		if (position > 0) {
  			query.append(node.isOr() ? " OR " : " AND ");
  		}
  
  		if (node.hasSiblings()) {
  			if (node.isNegating()) {
  				query.append("-");
  			}
  			if (!node.isRoot() || (node.isRoot() && node.isNegating())) {
  				query.append('(');
  			}
  
  			int i = 0;
  			for (Node nested : node.getSiblings()) {
  				query.append(createQueryStringFromNode(nested, i++, domainType));
  			}
  
  			if (!node.isRoot() || (node.isRoot() && node.isNegating())) {
  				query.append(')');
  			}
  		} else {
  			query.append(createQueryFragmentForCriteria((Criteria) node, domainType));
  		}
  		return query.toString();
  	}
docs: Create the plain query string representation of the given node using mapping information derived from the domain
  type.
  
  @param node
  @param position
  @param domainType can be {@literal null}.
  @return
  @since 4.0