Добавлено следующее в pom.xml:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
</dependency>
Затем, следуя в хранилище клиентов
@Cacheable(cacheNames="customer", key="#email")
@Query(value = "select company_name from customer where email =?1", nativeQuery = true)
List<String> getUserByEmailID(String emailID);
В файле app.prop указано следующее:
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.use_query_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
spring.jpa.properties.javax.persistence.sharedCache.mode=ALL
Добавлено следующее в сущности клиента:
@Cacheable
@org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "customer")
public class Customer implements Serializable {
..}
Код, для которого требуется кэширование:
List<String> ibCustomers = customerRepository.getUserByEmailID("XXX@abc.com");
Моя цель - внедрить кэширование второго уровня с запросом, что означает, что при повторном создании одного и того же запроса запрос не должен выполняться. Прямо сейчас запрос запускается всегда, хотя я дал одно и то же письмо, так как каждый раз вижу это в журнале:
org.hibernate.SQL :
/* dynamic native SQL query */ select
company_name
from
customer
where
email =?
Что я делаю не так?