JavaEE – JPA(3):EntityManager相关核心概念
2016-12-21 10:20
483 查看
核心概念及其关联关系
首先,当然是介绍最核心最重要的EntityManager相关概念。
在学习和使用JPA的时候,经常会碰到几类对象:
EntityManager 以及 PersistenceContext
EntityManagerFactory 以及 PersistenceUnit
Persistence
4000
他们的名字也比较相似,他们之间的关联关系可以用下面的图进行表示:
EntityManager & PersistenceContext
首先来看看EntityManager接口中的几个典型方法的定义:
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// ......
}
以上的四个方法分别实现了数据的增删改查(CRUD)操作。它的作用就像一座桥梁,将面向对象和数据库的世界连接起来。在没有调用EntityManager接口中的方法是,一个Java对象就是一个内存中的存在而已,而在调用后它就会被持久到数据库的行列结构中去。
那么这些通过EntityManager被持久化到数据库中的对象,以及从数据库拉入到内存中的对象,也会同时被一个名为持久化上下文(Persistence Context)所管理,这些被管理的对象统称为受管对象(Managed Object),每个受管对象都有唯一的ID。至于EntityManager和持久化上下文之间的数量关系,一般可以是多对一的,即多个EntityManager同时指向一个持久化上下文。这其实很好理解,就是EntityManager虽然有多个实例,但是它们背后的持久化上下文却只有一个,这样就保证了多个EntityManager所管理的受管对象拥有的ID是唯一的。
既然EntityManager只是一个接口,那么是谁来负责实现它呢?就是实现了JPA的厂商,比如典型的EclipseLink,hibernate等。
EntityManagerFactory & PersistenceUnit
仍然还是先看看该接口提供的几个典型方法:
public interface EntityManagerFactory {
public EntityManager createEntityManager();
public CriteriaBuilder getCriteriaBuilder();
public Metamodel getMetamodel();
// ......
}
此接口中使用的最为频繁的就是第一个createEntityManager(),它能够创建并返回得到一个EntityManager接口的实现。既然是一个用于创建EntityManager接口的工厂接口,想必就会有一个用于控制如何生产的配置场所。这个配置场所就是上图中提到的持久化单元(Persistence Unit)。典型的比如在META-INF文件夹中创建的persistence.xml文件,其中就可以定义一个或者多个持久化单元。
那么EntityManagerFactory又是通过何种方法得到的呢?这得分两种环境来讨论。
JavaEE
JavaSE
在JavaEE环境下,一般通过依赖注入的方式引入:
@PersistenceUnit(unitName="unitNameDefinedInPersistenceConfig")
private EntityManagerFactory emf;
而这里所使用的PersistenceUnit结合其unitName所代表的就是定义在META-INF下persistence.xml配置文件中的某些具体配置。这些配置可以是数据库连接参数,也可以是其它JPA配置项,或者具体JPA实现(提供商)的配置项。
Persistence
在JavaSE环境下,可以通过Persistence类得到具体的EntityManagerFactory实现:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("unitNameDefinedInPersistenceConfig");
以上便是JPA中和EntityManager相关的几个核心概念。它们定义了普通Java对象(POJO)和数据库行记录之间的交互方式。至于普通Java对象(POJO)中的字段和数据库列记录之间的映射,我们将在后续的文章中逐一介绍。
首先,当然是介绍最核心最重要的EntityManager相关概念。
在学习和使用JPA的时候,经常会碰到几类对象:
EntityManager 以及 PersistenceContext
EntityManagerFactory 以及 PersistenceUnit
Persistence
4000
他们的名字也比较相似,他们之间的关联关系可以用下面的图进行表示:
EntityManager & PersistenceContext
首先来看看EntityManager接口中的几个典型方法的定义:
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// ......
}
以上的四个方法分别实现了数据的增删改查(CRUD)操作。它的作用就像一座桥梁,将面向对象和数据库的世界连接起来。在没有调用EntityManager接口中的方法是,一个Java对象就是一个内存中的存在而已,而在调用后它就会被持久到数据库的行列结构中去。
那么这些通过EntityManager被持久化到数据库中的对象,以及从数据库拉入到内存中的对象,也会同时被一个名为持久化上下文(Persistence Context)所管理,这些被管理的对象统称为受管对象(Managed Object),每个受管对象都有唯一的ID。至于EntityManager和持久化上下文之间的数量关系,一般可以是多对一的,即多个EntityManager同时指向一个持久化上下文。这其实很好理解,就是EntityManager虽然有多个实例,但是它们背后的持久化上下文却只有一个,这样就保证了多个EntityManager所管理的受管对象拥有的ID是唯一的。
既然EntityManager只是一个接口,那么是谁来负责实现它呢?就是实现了JPA的厂商,比如典型的EclipseLink,hibernate等。
EntityManagerFactory & PersistenceUnit
仍然还是先看看该接口提供的几个典型方法:
public interface EntityManagerFactory {
public EntityManager createEntityManager();
public CriteriaBuilder getCriteriaBuilder();
public Metamodel getMetamodel();
// ......
}
此接口中使用的最为频繁的就是第一个createEntityManager(),它能够创建并返回得到一个EntityManager接口的实现。既然是一个用于创建EntityManager接口的工厂接口,想必就会有一个用于控制如何生产的配置场所。这个配置场所就是上图中提到的持久化单元(Persistence Unit)。典型的比如在META-INF文件夹中创建的persistence.xml文件,其中就可以定义一个或者多个持久化单元。
那么EntityManagerFactory又是通过何种方法得到的呢?这得分两种环境来讨论。
JavaEE
JavaSE
在JavaEE环境下,一般通过依赖注入的方式引入:
@PersistenceUnit(unitName="unitNameDefinedInPersistenceConfig")
private EntityManagerFactory emf;
而这里所使用的PersistenceUnit结合其unitName所代表的就是定义在META-INF下persistence.xml配置文件中的某些具体配置。这些配置可以是数据库连接参数,也可以是其它JPA配置项,或者具体JPA实现(提供商)的配置项。
Persistence
在JavaSE环境下,可以通过Persistence类得到具体的EntityManagerFactory实现:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("unitNameDefinedInPersistenceConfig");
以上便是JPA中和EntityManager相关的几个核心概念。它们定义了普通Java对象(POJO)和数据库行记录之间的交互方式。至于普通Java对象(POJO)中的字段和数据库列记录之间的映射,我们将在后续的文章中逐一介绍。
相关文章推荐
- JavaEE – JPA(4):EntityManager相关核心概念
- [JavaEE - JPA] 4. EntityManager相关核心概念
- [JavaEE - JPA] 4. EntityManager相关核心概念
- [JavaEE - JPA] 4. EntityManager相关核心概念
- [JavaEE - JPA] 5. ORM的核心注解 - 访问方式,表映射以及主键生成
- Apriori算法详解之【一、相关概念和核心步骤】
- Apriori算法详解之【一、相关概念和核心步骤】
- cocos2d-x-3.3-009-核心概念和相关类-层
- [JavaEE - JPA] 6. ORM的核心注解 - 基础类型以及嵌套类型
- [JavaEE - JPA] 1. 事务的基础概念
- TestNG 并发运行相关的核心概念 - 补充
- cocos2d-x-3.3-010-核心概念和相关类-精灵
- [JavaEE - JPA] 7. ORM的核心注解 - 关系类型
- netty的相关概念和核心组件
- [JavaEE - JPA] 6. ORM的核心注解 - 基础类型以及嵌套类型
- 蓝牙核心-链路管理相关概念
- TestNG 并发运行相关的核心概念
- 图解 HTTP:Web开发相关的一些核心基础概念
- cocos2d-x-3.3-006-核心概念和相关类-导演
- JavaEE – JPA(4):ORM的核心注解 – 访问方式,表映射以及主键生成