LazyInitializationException中尝试访问时分离对象在Redis的四周留有由R

2019-10-28 10:51发布

我使用Spring Redis的数据,以高速缓存使用Redis的系列化JPA实体org.springframework.data.redis.cache.RedisCacheManager

这里是方法:

@Override
@Cacheable(value = MapCacheConfiguration.DATABASE_CACHE_NAME, key = "#root.method.name")
public Curriculum findCurriculumByMemberId(Long memberId) {
    return curriculumRepository.findCurriculumByMemberId(memberId);
}

不幸的是,在我的引导应用程序的重新启动,实体仍缓存在Redis的,我也得到一个org.hibernate.LazyInitializationException

这可能是上述理由在这个岗位 ,即获得由Hibernate分离对象-在我的情况下,序列化对象在缓存中左左右。

可有人请告知处理这一问题的策略?

  1. 我应该清理/空时记住我的应用程序轴承的破坏缓存重新填充缓存的过程是昂贵的,应用程序会在该DYNOS /容器破坏并重新创建(并因此重新启动云(Heroku的)被托管)相当频繁。
  2. 或者是有办法重新安装到缓存的实体到实体管理器?
  3. 有没有更好的解决办法?

Answer 1:

从未使用Redis的,但如果你的缓存应该是持久的跨应用程序重新启动您可能需要缓存的实体之前,获取所有所需的关系。 另外一个关注的可能是那些缓存的实体分离,这可能是一个问题,如果你想在交易中再次使用它们。 当然,你可以通过调用重新连接它们merge(entity) ,这在另一方面可能导致与缓存的人压倒一切的新数据的问题。

考虑持续性高速缓存的另一件事是一流的版本,因为如果你改变之间重新部署你的类,如果缓存已经与以前的类版本实例设置反序列化将失败。



文章来源: LazyInitializationException when trying to access detached objects left around in Redis by RedisCacheManager