当前位置: 首页 > 面试题库 >

事务范围的持久性上下文和扩展的持久性上下文之间有什么区别?

麻桐
2023-03-14
问题内容

事务范围的持久性上下文和扩展的持久性上下文之间有什么区别?


问题答案:

在JSR-220
Enterprise JavaBeans 3.0规范中清楚地解释了差异:

5.6容器管理的持久性上下文

(…)

可以将容器管理的持久性上下文定义为具有范围为单个事务的生存期或跨越多个事务的扩展生存期,这取决于创建容器PersistenceContextType时所指定的生存期
EntityManager。该规范分别将这种持久性上下文称为 事务范围的持久性上下文扩展的持久性上下文

(…)

5.6.1容器管理的事务作用域持久性上下文

该应用程序可以通过在JNDI名称空间中进行注入或直接查找,来获得具有绑定到JTA事务的事务范围持久性上下文的容器管理的实体管理器。实体管理器的持久性上下文类型默认为或定义为
PersistenceContextType.TRANSACTION

当在活动JTA事务的范围内调用容器管理的实体管理器时,新的持久性上下文开始[36],并且当前没有持久性上下文已经与JTA事务相关联。创建持久性上下文,然后将其与JTA事务关联。

当关联的JTA事务提交或回滚时,持久上下文结束,并且由EntityManager管理的所有实体都被分离。

如果在事务范围之外调用实体管理器,则从数据库加载的任何实体都将在方法调用结束时立即分离。

5.6.2容器管理的扩展持久性上下文

容器管理的扩展持久性上下文只能在有状态会话bean的范围内启动。从PersistenceContextType.EXTENDED
创建声明依赖于类型的实体管理器的依赖关系的有状态会话Bean的点开始存在,并说它已绑定到有状态会话Bean。通过PersistenceContext注释或persistence-
context-ref部署描述符元素声明对扩展的持久性上下文的依赖性 。

@Remove 有状态会话Bean 的方法完成时(或以其他方式破坏有状态会话Bean实例),容器将关闭持久性上下文。

(…)



 类似资料:
  • 问题内容: 我是Java世界和JPA的新手。我在学习JPA时遇到了许多新术语,例如Entity,persistence。在阅读时,我无法理解 Persistence Context 的确切定义。 谁能用简单的外行术语解释它?与中使用的数据有什么关系? 例如,我发现此定义太复杂而难以理解: 持久性上下文是一组实体,因此对于任何持久性标识,都有一个唯一的实体实例。 问题答案: 持久性上下文处理一组实体

  • 持久性上下文是一组实体,因此对于任何持久性标识都有一个唯一的实体实例。

  • Vlad关于如何修复MultipleBagsException的示例将是我们的起点:如何修复MultipleBagsException-Vlad Mihalcea EntityManager的定义如下: 那么,为什么我们需要启动事务以便启用PersistenceContext,即使我们将其设置为使用扩展上下文呢?

  • 有一种方法可以绕过持久性上下文,只将实体用作数据库表的包装器?

  • 我正在使用Wildfly 10.0。0最终版本、JavaEE7、Maven和JPA2.1。当我查询数据库中的记录时,它可以正常工作并列出员工,但当我尝试保留新员工时,它会给我以下异常: 我正在尝试使用JSF和CDI bean实现这一点。我有一个JTA数据源,我在persistence.xml文件中配置了它: CDI豆可以在下面看到。这是相对简单的,有一个方法列出25名员工和另一个应该坚持一个特定的

  • 问题内容: 我正在使用Wildfly 10.0.0 Final,Java EE7,Maven和JPA 2.1。当我查询数据库中的记录时,它可以正常工作并列出员工,但是当我尝试保留新员工时,它给了我以下异常: 我正在尝试使用JSF和CDI bean来实现。我有一个JTA数据源,已在persistence.xml文件中对其进行配置: 可以在下面看到CDI bean。比较简单,有一种方法可以列出25名雇