@Stateful EJB可以使用PersistenceContextType.EXTENDED在多个事务中重用相同的EntityManager。这在实现会话范围时很有用。 Spring是否对此有任何支持?
答案 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)
,它将创建具有扩展持久性上下文的实体管理器(提交事务后,它不会自动分离实体)。