【问题标题】:Avoid 1 level cache issues while using @PersistenceContext(type=PersistenceContextType.EXTENDED)使用 @PersistenceContext(type=PersistenceContextType.EXTENDED) 时避免 1 级缓存问题
【发布时间】:2023-04-03 03:32:01
【问题描述】:

我刚刚在我的 DAO 类上配置了 @PersistenceContext(type=PersistenceContextType.EXTENDED) 以在视图层上进行延迟加载(需要让它不为此关闭会话),但我遇到了 1 级缓存问题(我想)..因为即使我的二级缓存设置关闭,对象也会被缓存。关闭“type=PersistenceContextType.EXTENDED”后,系统没有缓存对象,而是再次陷入延迟加载问题。

//@PersistenceContext(type=PersistenceContextType.EXTENDED)
@PersistenceContext 私有EntityManager entityManager;

有什么办法可以控制吗?我真的需要延迟加载,但不想每次都将我的对象存储在 1 级缓存中。

谢谢

【问题讨论】:

  • 抱歉:我使用的是休眠 jpa impl

标签: java hibernate spring jpa jpa-2.0


【解决方案1】:

除非您真的想使用扩展的持久性上下文并真正理解它的含义(我并不是要迂腐,但这很重要,因为扩展的实体管理器具有不同的线程、生命周期和内存管理语义),我的建议是使用通常的 OEIV (Open EntityManager in View) 模式 来解决您的延迟加载问题。

Spring 提供了这个模式的两个实现,一个过滤器(OpenEntityManagerInViewFilter)和一个拦截器(OpenEntityManagerInViewInterceptor)。来自 javadoc:

适用于“在视图中打开 EntityManager”模式,即允许在 Web 视图中延迟加载,尽管原始事务已经完成。

【讨论】:

  • 嗯,它会让我的持久性与请求创建的线程一起存活,不知道它是否会给我带来问题,但可能比 PersistenceContextType.EXTENDED 更好。谢谢
猜你喜欢
  • 2011-09-25
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 2018-03-28
  • 1970-01-01
相关资源
最近更新 更多