Как реализовать кэш второго уровня при получении данных с использованием поля, кроме Id - PullRequest
0 голосов
/ 29 марта 2019

Я хочу реализовать кэш второго уровня для одной из сущностей. Но я выбираю данные, используя поле, которое не является ID. Я читал во многих постах, что кэш второго уровня работает, только если мы выбираем данные, используя id. Есть ли способ?, так что я могу реализовать кэш второго уровня для извлечения данных, используя поле, отличное от id?Я использую Eh-кеш, репозиторий JPA и Spring Boot. Как я могу реализовать кэш запросов?

в файле свойств:

hibernate.cache.use_second_level_cache = true

hibernate.cache.use_query_cache = true

hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory

Repository.java

public interface SomeRepository extends JpaRepository<SomeClass, Long> {

   @Query("SELECT .....WHERE id= :someId")
   @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
   List<Lookup> findAllByProjectId(@Param("someId") Long someId);

}

1 Ответ

0 голосов
/ 29 марта 2019

Как правило, вы спрашиваете, как кэшировать результаты запроса. Для этого Hibernate имеет QueryCache :

Цитаты из документации:

Чтобы использовать кэширование запросов, сначала вам нужно включить его с помощью следующее свойство конфигурации:

<property
    name="hibernate.cache.use_query_cache"
    value="true" />

Пример 457. Кэширование запроса с использованием JPA

List<Person> persons = entityManager.createQuery(
  "select p " +
  "from Person p " +
  "where p.name = :name", Person.class)
.setParameter( "name", "John Doe")
.setHint( "org.hibernate.cacheable", "true")
.getResultList();

Пример 458. Кэширование запроса с использованием собственного API Hibernate

List<Person> persons = session.createQuery(
  "select p " +
  "from Person p " +
  "where p.name = :name")
.setParameter( "name", "John Doe")
.setCacheable(true)
.list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...