public Predicate addFilter(
      Root<UserEntity> root, FilterConstraint constraint, String value, CriteriaBuilder cb) {

    if (constraint != FilterConstraint.PRESENT
        && (field.getType() == ExtensionFieldType.INTEGER
            || field.getType() == ExtensionFieldType.DECIMAL)) {

      value = numberPadder.pad(value);
    }

    final SetJoin<UserEntity, ExtensionFieldValueEntity> join =
        createOrGetJoin(
            generateAlias(urn + "." + field.getName()), root, UserEntity_.extensionFieldValues);

    Predicate filterPredicate =
        constraint.createPredicateForExtensionField(
            join.get(ExtensionFieldValueEntity_.value), value, field, cb);

    Predicate valueBelongsToField =
        cb.equal(
            join.get(ExtensionFieldValueEntity_.extensionField)
                .get(ExtensionFieldEntity_.internalId),
            field.getInternalId());

    join.on(valueBelongsToField);

    return filterPredicate;
  }