    public void processField(final FilterFieldDataBase<?> field) {
        final String fieldName = field.getBaseName();
        if (fieldName.equals(CommonFilterConstants.PROPERTY_TAG_EXISTS)) {
            final FilterFieldBooleanMapData mapField = (FilterFieldBooleanMapData) field;
                for (final Map.Entry<Integer, Boolean> entry : mapField.getData().entrySet()) {
                final Integer propertyTagId = entry.getKey();
                final Boolean fieldValueBoolean = entry.getValue();
                if (propertyTagId != null && fieldValueBoolean) {
                    addFieldCondition(getCriteriaBuilder().exists(getPropertyTagExistsSubquery(propertyTagId)));
                }
            }
        } else if (fieldName.startsWith(CommonFilterConstants.PROPERTY_TAG_NOT_EXISTS)) {
            final FilterFieldBooleanMapData mapField = (FilterFieldBooleanMapData) field;
            for (final Map.Entry<Integer, Boolean> entry : mapField.getData().entrySet()) {
                final Integer propertyTagId = entry.getKey();
                final Boolean fieldValueBoolean = entry.getValue();
                if (propertyTagId != null && fieldValueBoolean) {
                    addFieldCondition(getCriteriaBuilder().not(getCriteriaBuilder().exists(getPropertyTagExistsSubquery(propertyTagId))));
                }
            }
        } else if (fieldName.startsWith(CommonFilterConstants.PROPERTY_TAG)) {
            final FilterFieldStringMapData mapField = (FilterFieldStringMapData) field;
            for (final Map.Entry<Integer, String> entry : mapField.getData().entrySet()) {
                final Integer propertyTagId = entry.getKey();
                final String fieldValue = entry.getValue();
                if (propertyTagId != null && fieldValue != null) {
                    addExistsCondition(getPropertyTagSubquery(propertyTagId, (String) field.getData()));
                }
            }
        } else {
            super.processField(field);
        }
    }

    public void processField(final FilterFieldDataBase<?> field) {
        final String fieldName = field.getBaseName();
        if (fieldName.equals(CommonFilterConstants.PROPERTY_TAG_EXISTS)) {
            final FilterFieldBooleanMapData mapField = (FilterFieldBooleanMapData) field;
                for (final Map.Entry<Integer, Boolean> entry : mapField.getData().entrySet()) {
                final Integer propertyTagId = entry.getKey();
                final Boolean fieldValueBoolean = entry.getValue();
                if (propertyTagId != null && fieldValueBoolean) {
                    addFieldCondition(getCriteriaBuilder().exists(getPropertyTagExistsSubquery(propertyTagId)));
                }
            }
        } else if (fieldName.startsWith(CommonFilterConstants.PROPERTY_TAG_NOT_EXISTS)) {
            final FilterFieldBooleanMapData mapField = (FilterFieldBooleanMapData) field;
            for (final Map.Entry<Integer, Boolean> entry : mapField.getData().entrySet()) {
                final Integer propertyTagId = entry.getKey();
                final Boolean fieldValueBoolean = entry.getValue();
                if (propertyTagId != null && fieldValueBoolean) {
                    addFieldCondition(getCriteriaBuilder().not(getCriteriaBuilder().exists(getPropertyTagExistsSubquery(propertyTagId))));
                }
            }
        } else if (fieldName.startsWith(CommonFilterConstants.PROPERTY_TAG)) {
            final FilterFieldStringMapData mapField = (FilterFieldStringMapData) field;
            for (final Map.Entry<Integer, String> entry : mapField.getData().entrySet()) {
                final Integer propertyTagId = entry.getKey();
                final String fieldValue = entry.getValue();
                if (propertyTagId != null && fieldValue != null) {
                    addExistsCondition(getPropertyTagSubquery(propertyTagId, fieldValue));
                }
            }
        } else {
            super.processField(field);
        }
    }
