使用Spring+JPA+Hibernate+Ehcache。
我试图在L2缓存中缓存Hibernate集合(使用EhCache)。
实体注释为@Cache(region=abc,strategy=READ_WRITE)
当我尝试用具有相同配置的@Cache注释注释懒惰/急切加载的集合时,会产生下面提到的异常:
org.hibernate.cache.ehcache.internal.nonstop.NonstopAwareEntityRegionAccessStrategy :不能将org.hibernate.cache.spi.access.CollectionRegionAccessStrategy转换为java.lang.ClassCastException
这里的议程是缓存应用程序启动时数据库中的所有数据,以获得最佳性能。
发布于 2017-10-03 17:37:39
解决这个明显缺陷的方法是将您的集合和实体区域命名不同:
@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<>();
}发布于 2018-07-05 01:58:11
这在Hibernate version - 5.2.17.Final中是固定的
但是请记住,如果您希望在jpa中将缓存的对象从集合中删除,您可能希望使用NONSTRICT_READ_WRITE。
See NonStrictReadWriteEhcacheCollectionRegionAccessStrategy vs ReadWriteEhcacheCollectionRegionAccessStrategy如这里所解释的,http://forums.terracotta.org/forums/posts/list/4413.page
https://stackoverflow.com/questions/39308686
复制相似问题