12.5. Jakarta Persistence EntityManager


Jakarta Persistence 实体管理器代表与持久上下文的连接。您可以使用实体管理器从持久上下文定义的数据库读取并写入数据库。

持久性上下文通过 javax.pers istence 软件包中的 Java 注释 @Persistence Context 提供。实体管理器通过 Java 类 javax.persistence.EntityManager 提供。在任何受管 Bean 中,实体管理器 实例都可以注入,如下所示:

示例:实体管理器注入

@Stateless
public class UserBean {
    @PersistenceContext
    EntityManager entitymanager;
    ...
}

12.5.1. application-Managed EntityManager

应用管理的实体管理器提供对底层持久性提供商 org.hibernate.jpa.HibernatePersistenceProvider 的直接访问。应用程序管理的实体管理器的范围从应用创建并持续到应用关闭的时间。您可以使用 @PersistenceUnit 注释将持久性单元注入 javax.persistence.EntityManagerFactory 接口,该界面返回应用管理的实体管理器。

当您的应用需要访问特定持久性单元中不通过 Jakarta Transactions 实例传播的持久性上下文时,可以使用应用管理 的实体管理器。在这种情况下,每个实体 管理器 实例都会创建一个新的隔离持久性上下文。您的应用程序将明确创建和销毁 实体管理器 实例及其关联的 PersistenceContext。当您无法直接注入实体管理器实例时,也可使用应用管理 的实体管理器,因为 实体管理器 实例不是线程安全。EntityManagerFactory 实例是 thread-safe。

示例:应用程序管理的实体管理器

@PersistenceUnit
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try {
    utx.begin();
    em.persist(SomeEntity);
    em.merge(AnotherEntity);
    em.remove(ThirdEntity);
    utx.commit();
}
catch (Exception e) {
    utx.rollback();
}

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.