Hibernate Second Level Cache не обновляет кеш, высвобождая все записи - PullRequest
0 голосов
/ 26 февраля 2019

Я включил Hibernate L2 Cache в Spring Data с помощью поставщика EHcache.

Я использую Spring Boot 2.1.0.RELEASE

Приложение Ehcache Hibernate

 <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>5.4.1.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.1.Final</version>
        </dependency>

.properties

spring.jpa.show-sql=true

logging.level.root=INFO


# jpa properties
spring.jpa.properties.hibernate.show-sql=true
spring.jpa.properties.hibernate.format-sql=true





# statistics
spring.jpa.properties.hibernate.generate_statistics=false

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

#spring.jpa.properties.javax.persistence.sharedCache.mode=ALL

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

Моя сущность

@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "TCountry")
@Data
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

public class TCountry {
    @Id
    private String countryCode;

    @Column(name = "region_code")
    private String regionCode;

    @Column(name = "entryTime")
    private Date entryTime;


    private String entryUser;


}

Репозиторий

public interface TCountryRepository extends CrudRepository<TCountry, String> {

    @Override
    @QueryHints({
            @QueryHint(name = "org.hibernate.cacheable", value = "true")})
    List<TCountry> findAll();


}

Тест

 @Test
    public void contextLoads() throws InterruptedException {

        log.info("found {}", tCountryRepository.findAll());

        TCountry ad = tCountryRepository.findById("AD").get();
        ad.setEntryTime(new Date());
        tCountryRepository.save(ad);

        log.info("found {}", tCountryRepository.findAll().stream().filter(
                c -> c.getCountryCode().equals("AD")).findAny().get());

    }

Когда я сохраняю и запускаюfindAll() снова идет в базу данных снова.Я думаю, что при сохранении будет обновлен кеш.

Если я удаляю save(), он не попадает в базу данных.

Я что-то упустил?Если после сохранения () он попадает в базу данных, тогда какой смысл в кеше!

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