在L2 Cache Ehcache中缓存Hibernate Collection时出现异常

时间:2016-09-03 15:47:37

标签: hibernate caching collections ehcache

使用Spring + JPA + Hibernate + Ehcache。

我正在尝试在二级缓存中缓存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

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

2 个答案:

答案 0 :(得分: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<>();
}

答案 1 :(得分:0)

此问题已在Hibernate version - 5.2.17.Final

中修复

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

See NonStrictReadWriteEhcacheCollectionRegionAccessStrategy vs ReadWriteEhcacheCollectionRegionAccessStrategy,如此处http://forums.terracotta.org/forums/posts/list/4413.page

所述