gpt4 book ai didi

jpa - UserTransaction 和 EntityManager 是如何交互的?

转载 作者:行者123 更新时间:2023-12-03 14:57:49 25 4
gpt4 key购买 nike

这是一个学术问题;我没有与此相关的损坏代码。我只是想扩大我对幕后发生的事情的理解。

我在 JPA DAO 中为典型的 JSF Web 应用程序使用的代码模式(从书籍和教程中复制)基本上是这样的:

public class someDAO {

@PersistenceContext protected EntityManager em;
@Resource private UserTransaction utx;

public void persist(Entity entity) {
try {
utx.begin();
em.persist(entity);
utx.commit();
} catch ( // gawd awful long list of possible exceptions )

// etc

所以我的问题如下:
  • 为什么 EntityManager 实例和 UserTransaction 实例注入(inject)了来自两个看似无关的包的注解?
  • 为什么使用注释@Resource 和@PersistenceContext 而不是@ManagedProperty 或@Inject?
  • 如何坚持() 方法访问并与 交互utx 目的?如果我忘记了 utx.begin() 调用实体管理器知道它并抛出异常。它必须以某种神奇的方式找到 UserTransaction 对象。像这样定义接口(interface)不是更好的架构吗: em.persist(utx, 实体) ?
  • 如果 utx 是某种单例 - 一次可以打开多个 UserTransaction 吗?

  • 非常感谢任何讨论。

    最佳答案

  • 因为 UserTransaction 是 Java Transaction API (JTA) 的一部分,而 EntityManager 是 Java Persistence API (JPA) 的一部分。 JTA 不是 JPA 的一部分。 JPA 使用 JTA 提供的服务。
  • ManagedProperty 不是一些注释,它仅在使用 @ManagedBean 注释的类中有效。也许不注入(inject) UserTransaction 被认为更好
    托管bean的不同方式。
  • JNDI 查找事件事务。保留名称似乎是 java:comp/UserTransaction。一种实现方式:http://www.java2s.com/Open-Source/Java-Document/Database-ORM/hibernate/org/hibernate/transaction/JTATransactionFactory.java.htm
  • 它不是某种单例,您可以拥有多个。但是每个线程只能激活一个。
  • 关于jpa - UserTransaction 和 EntityManager 是如何交互的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617026/

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