首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA PersistenceContextType是否由容器管理?

JPA PersistenceContextType是否由容器管理?
EN

Stack Overflow用户
提问于 2020-06-17 18:44:22
回答 1查看 75关注 0票数 0

JPA定义了PersistenceContextType,但在JPA中没有引用它。

代码语言:javascript
复制
public enum PersistenceContextType {
    TRANSACTION,
    EXTENDED
}

持久性上下文(无论是事务还是扩展)是由容器(例如JEE)管理的,而不是JPA本身管理的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-17 20:36:31

但是在JPA api中没有引用它。

它由声明性API引用-- @PersistenceContext注释的@PersistenceContext属性。任何编程API引用它都是没有意义的,因为应用程序管理的EntityManagers总是EXTENDED类型,因为TRANSACTION类型没有多大意义。

持久性上下文(无论是事务还是扩展)是由容器(例如JEE)管理的,而不是JPA本身管理的吗?

我不完全理解这个问题,但是,根据规格 (7.6节):

当使用容器管理实体管理器时,持久性上下文的生命周期总是自动地、透明地管理到应用程序,并且持久化上下文与JTA事务一起传播。

请注意,容器管理的EXTENDED持久性上下文只能在有状态bean中被请求(使用@PersistenceContext(type = EXTENDED)),而这些bean现在很少使用。

(有关事务和扩展作用域如何工作的更多详细信息,请参阅该节和后面各节)

编辑:

至于为什么@PersistenceContextPersistenceContextType是JPA API的一部分,答案是:为什么不应该呢?JPA API 主要是一个JEE,您的应用程序可能希望在API中使用的所有与持久性相关的内容都在其中。在JEE上下文中,Hibernate、EclipseLink等在技术上是而不是JPA的实现;相反,它们是服务。这是一个非常微妙的区别;然而,尽管他们显然完成了99%的工作,但从应用程序的角度来看,仍然是提供(公开) JPA的容器。

(另一种观点可能是,JPA提供者实现API的编程部分,而容器实现声明性部分,但这是纯粹的学术讨论)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62436179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档