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; }