【问题标题】:Does Spring support PersistenceContextType.EXTENDED?Spring 是否支持 PersistenceContextType.EXTENDED?
【发布时间】:2011-07-02 17:17:09
【问题描述】:

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

【问题讨论】:

  • 看起来存在相互冲突的观点,没有公认的答案。社区/Spring Boot 提交者的反应是什么?

标签: java spring jpa ejb-3.0 entitymanager


【解决方案1】:

Implementing DAOs based on plain JPA 对此有一个简短的讨论:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-08-04
        • 2018-07-26
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 2017-03-25
        相关资源
        最近更新 更多