Включить кеширование запросов - PullRequest
0 голосов
/ 28 июня 2018

Мне нужна помощь с кешированием запросов в Hibernate Framework. Я настроил свойства ниже, и кеширование l2 работает в моем проекте.

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

Я использую аннотации для сущностей, и при извлечении любого объекта MyClass кэширование работает нормально. Когда я использую метод getOnlyNames снизу, кэширование запросов интерфейса не работает. Возможно ли включить кэширование запросов для методов, которые возвращают, например. list of String (не список сущностей, а только выбранные поля)?

@Entity
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class MyClass {
    @Id
    private long id;
    private long name;
}

интерфейс

@Repository
@RepositoryRestResource(exported = false)
public interface MyClassRepository extends JpaRepository<Category, Long> {
(...)
@Cacheable("getOnlyNames")
@Query("select m.name from MyClass m")
List<String> getOnlyNames(); 

}

1 Ответ

0 голосов
/ 28 июня 2018

Согласно этому сайту , если вы пытаетесь кешировать результаты запроса, а не объекты, синтаксис такой:

entityManager.createQuery("select f from Foo f")
  .setHint("org.hibernate.cacheable", true)
  .getResultList();

Если настроено кэширование запросов в режиме гибернации (что вы делаете), это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...