gpt4 book ai didi

java - @Resource UserTransaction 和 EntityManager.getTransaction() 有什么区别

转载 作者:IT老高 更新时间:2023-10-28 21:06:24 26 4
gpt4 key购买 nike

谁能解释两者之间的区别:

@Resource
UserTransaction objUserTransaction;

EntityManager.getTransaction();

还有什么是容器管理事务?如果我想在事务中的表中插入三行,我应该如何在我的 session 外观中执行此操作。

最佳答案

EJB 是事务性组件。事务可以由应用服务器本身管理(CMT - 容器管理事务),也可以由您自己在 EJB 中手动管理(BMT - bean 管理事务)。

EJB 通过 JTA 规范支持分布式事务。使用 UserTransaction 控制分布式事务,其中有方法 begincommitrollback

使用 CMT,应用服务器为您启动、提交和回滚事务(根据 transaction annotations ),您不得干预。这意味着在这种情况下您不能访问 UserTransaction。但是,使用 BMT,您可以手动执行此操作,并使用 UserTransaction 自行控制事务。

现在让我们转到 EntityManager。 JPA 实现既可以在应用程序服务器中使用,也可以独立使用。如果单机使用,需要自己使用EntityManage.getTransaction来划定JDBC事务。如果在应用程序服务器中使用,EntityManager 会为您透明地与 JTA 分布式事务管理器协作。

大多数时候,您在 EJB 上使用带有 @Required 注释的 CMT。这意味着您既不需要访问 UserTransaction 也不需要访问 EntityManager.getTransaction。该应用程序。服务器启动并提交事务,但如果引发异常,也会注意回滚。这就是我为你的立面推荐的。

(还有更多微妙之处,例如 PersistenceContextType 或在分布式事务中手动登记实体管理器与 EntityManager.joinTransaction ,但前提是您以不同的方式使用这些技术作为默认值)。

关于java - @Resource UserTransaction 和 EntityManager.getTransaction() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2517062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com