Spring是否支持PersistenceContextType.EXTENDED?

时间:2011-02-23 12:10:43

标签: java spring jpa ejb-3.0 entitymanager

@Stateful EJB可以使用PersistenceContextType.EXTENDED在多个事务中重用相同的EntityManager。这在实现会话范围时很有用。 Spring是否对此有任何支持?

3 个答案:

答案 0 :(得分:0)

Implementing DAOs based on plain JPA中对此进行了简短的讨论:

  

@PersistenceContext注释有   一个可选的属性类型,它   默认为   PersistenceContextType.TRANSACTION。   您需要此默认值   收到共享的EntityManager代理。   替代方案,   PersistenceContextType.EXTENDED,是一个   完全不同的事:这个   导致所谓的扩展   EntityManager,但不是   线程安全,因此不得使用   在同时访问的组件中   比如Spring管理的单身人士   豆。仅限扩展EntityManagers   应该用于有状态的   例如,驻留的组件   在一个会话中,具有生命周期   EntityManager没有绑定   当前的交易,而不是存在   完全取决于应用程序。

所以不,听起来不像Spring支持他们。

答案 1 :(得分:0)

是的,Spring支持它。例如,请参阅Injection of PersistenceContext with PersistenceContextType EXTENDED

答案 2 :(得分:0)

Spring有一个带有静态工厂方法的特殊类,用于创建扩展实体管理器。参见ExtendedEntityManagerCreator

此外,如果注入EntityManagerFactory并调用createEntityManager(SynchronizationType.SYNCHRONIZED),它将创建具有扩展持久性上下文的实体管理器(提交事务后,它不会自动分离实体)。