使用@PersistenceContext时避免1级缓存问题(type = PersistenceContextType.EXTENDED)

时间:2010-10-27 01:07:58

标签: java hibernate spring jpa jpa-2.0

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

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

有没有办法控制这个?我真的需要延迟加载但不希望每次都将我的对象存储在1级缓存中。

感谢

1 个答案:

答案 0 :(得分:1)

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

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

  

用于“Open EntityManager in View”模式,即允许在Web视图中进行延迟加载,尽管原始事务已经完成。