Hello all - first thanks to the Spring Data team for a remarkable tool. It has saved us tons of time. Kudos!
I am trying to use query caching with non-CRUD queries in Spring Data. The hitch is that I want to have a separate cache region for each query. The reason is that I have to keep cache in sync between two unrelated systems (the other system does not use Spring or Hibernate), so I need to be able to find the cache for each individual query.
Here's an example:
Both "hibernate.cache.use_second_level_cache" and "hibernate.cache.use_query_cache" are set to true in the application context.Code:@Query("select s from State s where s.abbreviation = :abbreviation") @QueryHints({@QueryHint(name = "org.hibernate.cacheable", value = "true"), @QueryHint(name = "org.hibernate.cacheRegion", value = "StateRepository.findByAbbreviation")}) public State findByAbbreviation(@Param("abbreviation") String abbreviation);
The cache region is defined in ehcache.xml:
It seems that query caching is working, but it Hibernate is using the default query cache region "org.hibernate.cache.StandardQueryCache". Could Spring Data be somehow ignoring the "org.hibernate.cacheRegion" query hint? Or am I doing it wrong?Code:<cache name="StateRepository.findByAbbreviation" maxEntriesLocalHeap="1000" eternal="false" overflowToDisk="false" timeToLiveSeconds="0" timeToIdleSeconds="86400"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=false, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true" /> </cache>
Thanks in advance for any help!
Darrell Burgan


Reply With Quote