【问题标题】:Exception while caching Hibernate Collection in L2 Cache Ehcache在 L2 Cache Ehcache 中缓存 Hibernate 集合时出现异常
【发布时间】:2017-01-11 12:45:06
【问题描述】:

使用 Spring+JPA+Hibernate+Ehcache。

我正在尝试在 L2 缓存中缓存 Hibernate 集合(使用 EhCache)。

实体用@Cache(region=abc,strategy=READ_WRITE)注解

当我尝试使用具有相同配置的 @Cache 注释来注释 LAZY/EAGER 加载的集合时,它会导致下面提到的异常:

java.lang.ClassCastException: org.hibernate.cache.ehcache.internal.nonstop.NonstopAwareEntityRegionAccessStrategy 不能转换为 org.hibernate.cache.spi.access.CollectionRegionAccessStrategy

这里的议程是缓存,应用程序启动时数据库中的所有数据,以获得最佳性能。

【问题讨论】:

标签: hibernate caching collections ehcache


【解决方案1】:

解决这个明显错误的方法是对集合和实体区域进行不同的命名:

@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY, region="foo")
public class Foo {
    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="bar-list")
    @OneToMany
    private List<Bar> bars = new ArrayList<>();
}

【讨论】:

    【解决方案2】:

    这已在Hibernate version - 5.2.17.Final 中修复

    但请记住,如果您希望在 jpa 删除时从集合中删除缓存的对象,则可能需要使用 NONSTRICT_READ_WRITE

    See NonStrictReadWriteEhcacheCollectionRegionAccessStrategy vs ReadWriteEhcacheCollectionRegionAccessStrategy 在这里解释http://forums.terracotta.org/forums/posts/list/4413.page

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 2011-01-27
      • 2011-06-10
      • 2013-11-07
      • 1970-01-01
      • 2017-05-12
      • 2019-10-15
      相关资源
      最近更新 更多