Hibernate Кэш второго уровня всегда вызывает базу данных при получении Все объекты - PullRequest
3 голосов
/ 07 октября 2019

Я включил hibernate 2-го уровня кэширования в своем приложении sprint boot 2.1.8, добавив следующую конфигурацию:

spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory

Я также добавил зависимость eh кеша следующим образом:

     <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>5.3.11.Final</version>
    </dependency>

Я аннотировал сущность для кэширования:

@Entity(name = "entity")
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "entity")
@AttributeOverride(name = "id", column = @Column(name = "entity_id"))

    public class Entity extends ItemBase {
        private String n1;
        private String n2;
        private String n3;
        private int n4;
        @Column(name = "n_5")
        private int n5;
  //getters and setters
        }

Каждый раз, когда я вызываю класс репозитория (который расширяет JpaCrudRepository) и вызываю findAll ();или findOneById (), я вижу, что Hibernate log HQL-запросы и база данных фактически вызывается.

Желаемое поведение - получить список сущностей один раз из базы данных и сохранить их в кеше, где они должны обновляться там с помощью readнаписать стратегию.

Есть идеи, как этого достичь?

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