使用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
此处的议程是在应用程序启动时缓存数据库中的所有数据,以获得最佳性能。
答案 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