This section includes information on the following:

Querying Objects by ID

To get an entity from the Coherence cache with a specific ID (key), use: em.find(Entity.class, ID).

For example, em.find(Employee.class, 8) will get the entity with key 8, from the Coherence Employee cache.

If the entity is not found in the Coherence cache, TopLink executes a SELECT statement against the database. If a result is found, then the entity is constructed and placed into Coherence.

Querying Objects with Criteria

To get an entity that matches a specific selection criteria, use: em.createQuery("..."). For example, em.createQuery("select e from Employee e where e.name='John'") will execute a SELECT statement against the database to find employees with the name of John.

The query's specific behavior will depend on you Coherence cache configuration.

  • Grid Cache – The query will always check the database.

  • Grid Read and Grid Entity – The query will check the Coherence cache. If Coherence does not contain the Entity then the database is queried.

    You can use query hints to direct the query to the database instead of the Coherence cache.

  • CacheStore/CacheLoader – Non-primary key queries will check the database. Primary key queries are performed against the Coherence cache first.

Limitations and Restrictions

You should be aware of the following limitations when querying Coherence:

  • JPQL Bulk Updates and Deletes – This release of TopLink Grid does not provide support for JPQL bulk updates and deletes.

  • Joins – Because the Coherence Filter framework is limited to a single cache, JPQL join queries cannot be translated to Filters – all join queries will execute on the database.

    Coherence will continue to be used to avoid object constructions costs for the query results.

  • Projection queries – This release of TopLink Grid does not provide support for projection queries (reports).