XAP

Spring Data GigaSpaces Appendix

Query Keywords

Supported Keywords

The following table lists the keywords that are supported by the Spring Data GigaSpaces repository query derivation mechanism.

Logical keyword Keyword expressions
AND And
OR Or
AFTER After, IsAfter
BEFORE Before, IsBefore
CONTAINING Containing, IsContaining, Contains
BETWEEN Between, IsBetween
ENDING_WITH EndingWith, IsEndingWith, EndsWith
FALSE False, IsFalse
GREATER_THAN GreaterThan, IsGreaterThan
GREATER_THAN_EQUALS GreaterThanEqual, IsGreaterThanEqual
IN In, IsIn
IS Is, Equals, (or no keyword)
IS_NOT_NULL NotNull, IsNotNull
IS_NULL Null, IsNull
LESS_THAN LessThan, IsLessThan
LESS_THAN_EQUAL LessThanEqual, IsLessThanEqual
LIKE Like, IsLike
NOT Not, IsNot
NOT_IN NotIn, IsNotIn
NOT_LIKE NotLike, IsNotLike
REGEX Regex, MatchesRegex, Matches
STARTING_WITH StartingWith, IsStartingWith, StartsWith
TRUE True, IsTrue

Unsupported Keywords

The keywords listed below aren't supported in GigaSpaces repositories.

Logical keyword Keyword expressions
EXISTS Exists
NEAR Near, IsNear
WITHIN Within, IsWithin

Supported Querydsl Methods

The following Predicate methods are supported by Spring Data GigaSpaces to build Querydsl queries:

  • Number comparison: eq, ne, lt, loe, goe, between, notBetween
  • String comparison: like, matches, isEmpty, isNotEmpty, contains, containsIgnoreCase, endsWith, endsWithIgnoreCase, startsWith, startsWithIgnoreCase
  • Other comparison: isNull, isNotNull, in, notIn
  • Complex queries: and, or
  • Embedded fields

contains, startsWith, endWith and their ...IgnoreCase equivalents use the Regular Expression matches.

Supported Change API Methods

The following Change API methods are available while using Querydsl syntax (QChangeSet class):

  • Field: set, unset
  • Numeric: increment, decrement
  • Collections and maps: addToCollection, addAllToCollection, removeFromCollection, putInMap, removeFromMap
  • Lease: lease
  • Custom change: custom

Unsupported Operations

Although we try to support every Spring Data feature, sometimes native implementation is not possible using a SpaceClosed Where GigaSpaces data is stored. It is the logical cache that holds data objects in memory and might also hold them in layered in tiering. Data is hosted from multiple SoRs, consolidated as a unified data model. as a data source. Instead of providing workarounds, which are often slow, we decided to mark the following features as unsupported.

  • Using IgnoreCase, Exists, IsNear and IsWithin keywords:

    public interface PersonRepository extends GigaspacesRepository<Person, String> {
    // these methods throw an UnsupportedOperationException when called
    List<Person> findByNameIgnoreCase(String name);
    List<Person> findByNameExists(boolean exists);
    List<Person> findByAgeIsNear(Integer nearAge);
    List<Person> findByAgeIsWithin(Integer minAge, Integer maxAge);
    }
  • Setting Sort to ignoreCase:

    public interface PersonRepository extends GigaspacesRepository<Person, String> {
    // these methods throw an UnsupportedOperationException when called
    List<Person> findByNameIgnoreCase(String name);
    List<Person> findByNameExists(boolean exists);
    List<Person> findByAgeIsNear(Integer nearAge);
    List<Person> findByAgeIsWithin(Integer minAge, Integer maxAge);
    }
  • Setting any NullHandling in Sort other than NATIVE:

    // NullHandling other than NATIVE is not supported
    Sort sorting = new Sort(new Order(ASC, "id", NullHandling.NULLS_FIRST));
    // will throw an UnsupportedOperationException
    personRepository.findByNameEquals("paul", new PageRequest(1, 2, sorting));
  • Using query derivation in GigaspacesDocumentRepository:

    @SpaceDocumentName("Person")
    public interface DocumentQueries
    extends GigaspacesDocumentRepository<SpaceDocument, String> {
    @Query("name = ?")
    List<SpaceDocument> findByName(String name);
    // this declaration without @Query annotation
    // or named query from external resource
    // will throw UnsupportedOperationException during configuration
    List<SpaceDocument> findByAge(Integer age);
    }