一、EntityManager 详解1.1 定义与核心定位EntityManager是 JPA(Java Persistence API)的核心接口,首次在 EJB 3.0 规范(JSR 220,2006 年)中定义。它负责管理实体对象的生命周期,提供保存、更新、删除和查询实体等持久化操作。本质理解:EntityManager是应用程序与数据库之间的网关(gateway),它管理一个持久化上下文(Persistence Context)——即内存中托管实体的集合,负责将 Java 对象与数据库行相互转换,并与事务协调完成变更的提交(flush)。1.2 EntityManager 的获取方式java// 方式一:通过 EntityManagerFactory 创建(容器外) EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPU"); EntityManager em = emf.createEntityManager(); // 方式二:Spring 中通过 @PersistenceContext 注入(容器内) @PersistenceContext private EntityManager entityManager;1.3 实体生命周期(Entity Lifecycle)JPA 实体有四个明确的生命周期阶段:状态说明特征新建(Transient/New)通过new创建,尚未与EntityManager关联无持久化身份(ID 通常为 null),不在持久化上下文中托管(Managed)已与EntityManager关联,被持久化上下文管理有持久化身份,变更会在flush时自动同步到数据库游离(Detached)曾与EntityManager关联,但上下文已关闭或清除有持久化身份,但不受EntityManager管理,变更不会自动同步删除(Removed)标记为删除,flush时将从数据库中移除仍在持久化上下文中,直到flush后移除生命周期管理通过EntityManager的 API 进行,包括persist()、merge()、remove()和find()等方法。二、EntityManager 与 EntityManagerFactory 对比对比维度EntityManagerFactoryEntityManager定位工厂类,负责创建EntityManager实例具体操作对象,负责管理实体生命周期线程安全✅线程安全,可被多个线程共享❌非线程安全,不应在多个线程间共享创建开销重(需加载元数据,构建元模型)轻(从 Factory 获取)生命周期应用级(启动时创建,关闭时销毁)事务级或请求级(每次操作时获取和释放)配置绑定绑定到特定数据库和持久化单元继承 Factory 的配置多数据源每个数据源需要一个独立的 Factory从对应 Factory 获取关键设计原则Factory 线程安全,Manager 非线程安全:每个线程/事务应使用独立的EntityManager实例。一个数据源 = 一个 Factory:多数据源场景下,每个数据源需配置独立的EntityMa