3

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

4

3 回答 3

0

是的,Spring 支持它。例如,请参见使用 PersistenceContextType EXTENDED 注入 PersistenceContext

于 2011-02-23T13:02:52.793 回答
0

在Implementing DAOs based on plain JPA中有一个简短的讨论:

注解有一个可选的@PersistenceContext属性类型,默认为 PersistenceContextType.TRANSACTION. 此默认值是您接收共享EntityManager代理所需要的。替代方案 , PersistenceContextType.EXTENDED是完全不同的事情:这会导致所谓的 extended EntityManager,它不是线程安全的,因此不能在并发访问的组件中使用,例如 Spring 管理的单例 bean。ExtendedEntityManagers只应该用在有状态的组件中,例如,驻留在会话中,其生命周期EntityManager不依赖于当前事务,而是完全取决于应用程序。

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

于 2011-02-23T12:45:53.340 回答
0

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

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

于 2020-03-07T18:25:05.630 回答