java - HHH90001006 : Missing cache[default-update-timestamps-region] was created on-the-fly

标签 java spring hibernate caching ehcache

一个微不足道的Spring Boot 2.5 application使用带有 EhCache 3 和 Hibernate 5 的 Spring Data JPA,并启用查询和二级缓存:

spring.jpa.properties.hibernate.cache.use_query_cache=true
spring.jpa.properties.hibernate.cache.use_second_level_cache=true

在启动时为每个缓存生成来自 Hibernate 的警告和来自 EhCache 的信息消息:

WARN org.hibernate.orm.cache          HHH90001006: Missing cache[default-update-timestamps-region] was created on-the-fly. The created cache will use a provider-specific default configuration: make sure you defined one. You can disable this warning by setting 'hibernate.javax.cache.missing_cache_strategy' to 'create'.
INFO org.ehcache.core.EhcacheManager  Cache 'default-update-timestamps-region' created in EhcacheManager.

WARN org.hibernate.orm.cache          HHH90001006: Missing cache[default-query-results-region] was created on-the-fly. The created cache will use a provider-specific default configuration: make sure you defined one. You can disable this warning by setting 'hibernate.javax.cache.missing_cache_strategy' to 'create'.
INFO org.ehcache.core.EhcacheManager  Cache 'default-query-results-region' created in EhcacheManager.

这些 Hibernate 缓存的正确 EhCache 配置是什么?

最佳答案

Disable expiration on the default-update-timestamps-region cache as recommended by Hibernate :

@Configuration @EnableCaching
public class ApplicationConfiguration {
    @Bean
    public CacheManager ehCacheManager() {
        CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();

        hibernateDefaultUpdateTimestampsRegionConfiguration(cacheManager);
        hibernateDefaultQueryResultsRegion(cacheManager);

        return cacheManager;
    }

    /**
     * Create Hibernate's default-update-timestamps-region cache. No expiration per Hibernate recommendation:
     * https://github.com/hibernate/hibernate-orm/blob/main/documentation/src/main/asciidoc/userguide/chapters/caching/Caching.adoc#query-cache-regions
     *
     * @param cacheManager
     */
    private void hibernateDefaultUpdateTimestampsRegionConfiguration(CacheManager cacheManager) {
        CacheConfigurationBuilder<Object, Object> builder = CacheConfigurationBuilder
                .newCacheConfigurationBuilder(Object.class, Object.class,
                        ResourcePoolsBuilder.newResourcePoolsBuilder().offheap(1, MemoryUnit.MB));

        javax.cache.configuration.Configuration<Object, Object> cache = Eh107Configuration.fromEhcacheCacheConfiguration(builder);

        cacheManager.createCache("default-update-timestamps-region", cache);

        //cacheManager.createCache("default-update-timestamps-region", new MutableConfiguration<>());
    }

    /**
     * Create Hibernate's default-query-results-region cache.
     * https://github.com/hibernate/hibernate-orm/blob/main/documentation/src/main/asciidoc/userguide/chapters/caching/Caching.adoc#query-cache-regions
     *
     * @param cacheManager
     */
    private void hibernateDefaultQueryResultsRegion(CacheManager cacheManager) {
        CacheConfigurationBuilder<Object, Object> builder = CacheConfigurationBuilder
                .newCacheConfigurationBuilder(Object.class, Object.class,
                        ResourcePoolsBuilder.newResourcePoolsBuilder().offheap(1, MemoryUnit.MB));

        javax.cache.configuration.Configuration<Object, Object> cache = Eh107Configuration.fromEhcacheCacheConfiguration(builder);

        cacheManager.createCache("default-query-results-region", cache);

        //cacheManager.createCache("default-query-results-region", new MutableConfiguration<>());
    }

}

关于java - HHH90001006 : Missing cache[default-update-timestamps-region] was created on-the-fly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67993442/

相关文章:

Javafx IllegalArgumentException : Children : Duplicate children added

java - 当数组已声明为全局变量时,如何在方法内初始化数组?

Java 构造函数无法使用可变参数

Hibernate batch_size 最佳值

java - Hibernate 在 Oracle 中使用序列生成器和序列

java - 如何在Java中动态提取.gz文件?

angularjs - Spring Oauth2 SSO - 无法从 Auth 服务器注销

spring - Websockets - Tomcat+Spring+ActiveMQ 与 ActiveMQ 本身

java - Spring Security - 多个安全配置要求 - 将基本身份验证添加到现有的 REST API 身份验证

hibernate - 构建动态 ConstraintViolation 错误消息