anchor.diff:  Blaze-Persistence provides a number of built-in filter providers in the
   `com.blazebit.persistence.view.filter` package:
   
  -
   |===
  -|Built-in filters
  -
  -|GreaterOrEqualFilter
  -|LessOrEqualFilter
  -|EndsWithFilter
  -|LessThanFilter
  -|EqualFilter
  -|ContainsFilter
  -|StartsWithIgnoreCaseFilter
  -|StartsWithFilter
  -|EndsWithIgnoreCaseFilter
  -|NullFilter
  -|GreaterThanFilter
  -|ContainsIgnoreCaseFilter
  +|Built-in filters | Supported filter value types
  +
  +|GreaterOrEqualFilter | Number, Date
  +|LessOrEqualFilter | Number, Date
  +|EndsWithFilter | String
  +|LessThanFilter | Number, Date
  +|EqualFilter | Any
  +|ContainsFilter | String
  +|StartsWithIgnoreCaseFilter | String
  +|StartsWithFilter | String
  +|EndsWithIgnoreCaseFilter | String
  +|NullFilter | Boolean - `true` includes NULLs, `false` excludes NULLs
  +|GreaterThanFilter | Number, Date
  +|ContainsIgnoreCaseFilter | String
   |===
   
   It is also possible to filter by subview attributes. The following example illustrates
  
positive.code: Sorting by subquery attributes (see ??) is problematic for some DBs?
  
  [CAUTION]
  Currently, sorting by correlated attribute mappings (see ??) is also not fully supported.
  
  // Example
negative.code: The former method is just a way of adding multiple attribute filters at once. The supplied object values are used
  by the filter provider to append the appropriate restrictions to the query builder.
  
  If an entity view attribute is annotated with multiple attribute filters, the filter with empty name will activated
  if no filter name is specified when adding an attribute filter to the entity view settings. If you want any of the
  other named annotated filters to be used instead, you need to use an overloaded form of
  `com.blazebit.persistence.view.EntityViewSetting.addAttributeNamedFilter` which accepts the filter name as parameter:
  
  ```java
  EntityViewSetting<CatView, CriteriaBuilder<CatView>> setting = EntityViewSetting.create(CatView.class);
  setting.addAttributeFilter("name", "kitty"); // default filter applied, so 'KITTY' matches
  setting.addAttributeFilter("name", "containsCaseSensitive", "kitty"); 'KITTY' does not match
  ```
  
  At most one attribute filter can be activated per attribute.
  