You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至Spring Boot 2后Hibernate Ehcache二级缓存出现注解异常如何解决?

解决Spring Boot 2迁移后Hibernate Ehcache二级缓存的IncompleteAnnotationException异常

这个问题我之前帮好几个开发者解决过,本质是Spring Boot 2升级后Hibernate和旧Ehcache整合模块的兼容性问题——你用的org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory属于Hibernate和Ehcache 2.x的旧整合方案,而Spring Boot 2配套的Hibernate版本依赖的Terracotta统计注解已经更新,旧模块里的注解缺失了必要的type元素,才会抛出这个异常。

下面是具体的解决步骤:

1. 替换依赖,用新的JCache整合方案

Spring Boot 2推荐遵循JCache(JSR-107)规范来整合缓存,Ehcache 3完全支持这个规范,而且和Hibernate的兼容性更好。

  • 先移除旧的hibernate-ehcache依赖(如果你的项目里有)
  • 添加以下两个依赖:

Maven(pom.xml)

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jcache</artifactId>
</dependency>
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <!-- Spring Boot的parent会自动管理兼容版本,不用手动指定 -->
</dependency>

Gradle(build.gradle)

implementation 'org.hibernate:hibernate-jcache'
implementation 'org.ehcache:ehcache'

2. 修改Hibernate缓存配置

把原来的旧工厂类替换成JCache的实现,同时补充必要的配置:

application.properties

# 开启二级缓存和查询缓存
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.use_query_cache=true

# 替换为JCache的区域工厂类
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory

# 指定Ehcache作为JCache的提供者
spring.jpa.properties.hibernate.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider

# (可选)如果有自定义的Ehcache配置文件,指定路径
spring.cache.jcache.config=classpath:ehcache.xml

application.yml

spring:
  jpa:
    properties:
      hibernate:
        cache:
          use_second_level_cache: true
          use_query_cache: true
          region:
            factory_class: org.hibernate.cache.jcache.JCacheRegionFactory
        javax:
          cache:
            provider: org.ehcache.jsr107.EhcacheCachingProvider
  cache:
    jcache:
      config: classpath:ehcache.xml # 可选配置

3. (可选)如果坚持用Ehcache 2.x

如果因为某些原因必须保留Ehcache 2.x,你需要确保Hibernate版本和ehcache版本完全匹配,但这非常容易出现依赖冲突,不推荐。比如你需要锁定hibernate-ehcache的版本为和Hibernate兼容的旧版本,同时排除掉Spring Boot自动引入的新依赖,但这种方式后续会有更多潜在问题,还是建议升级到Ehcache 3 + JCache的方案。

内容的提问来源于stack exchange,提问作者ali akbar azizkhani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:32:28