JPA中的EntityManager

一、JPA   

    JPA(Java Persistence Api )JPA通过JDK5.0或XML描述对象--数据库关系表之间的映射关系,并将运行期的实体对象持久化到数据库中。其中 JPA包括以下3方面的技术:

        1、 ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

   2、JPA的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

  3、查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。


二、JPA中工作的重要员工

     

      1、EntityManagerFactory

      EntityManager称为实体管理器,它由EntityManagerFactory所创建。EntityManagerFactory,作为EntityManager的工厂,包含有当前O-R映射的元数据信息,每个EntityManagerFactory,可称为一个持久化单元(PersistenceUnit),每个持久化单元可认为是一个数据源的映射(所谓数据源,可理解为一个数据库,我们可以在应用服务器中配置多个数据源,同时使用不同的PersistenceUnit来映射这些数据源,从而能够很方便的实现跨越多个数据库之间的事务操作!——JTA不做解释)

 

      2、PersistenceContext

       PersistenceContext称为持久化上下文,它一般包含有当前事务范围内的,被用来管理(Entity)的数据。每个EntityManager,都会跟一个PersistenceContext相关联。PersistenceContext中存储的是实体对象的数据,而关系数据库中存储的是记录,EntityManager正是维护这种OR映射的中间者,它可以把数据从数据库中加载到PersistenceContext中,也可以把数据从PersistenceContext中持久化到数据库,EntityManager通过Persist、merge、remove、refresh、flush等操作来操纵PersistenceContext与数据库数据之间的同步!

 

        3、EntityManger

        EntityManager是应用程序操纵持久化数据的接口。是用来对实体Bean进行操作的辅助类。它可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean。实体Bean被EntityManager 管理时,EntityManager跟踪他的状态改变,在任何决定更新实体Bean的时候便会把发生改变的值同步到数据库中。当实体Bean 从EntityManager 分离后,他是不受管理的,EntityManager无法跟踪他的任何状态改变。EntityManager 的获取前面已经介绍过,可以通过@PersistenceContext 注释由EJB 容器动态注入。       


三、类比

     这些概念的作用与hibernate是类似,他们都是持久化的一种实现。

     实体管理

     hibernate session为了能够在一个请求周期中使用同一个session对象,在hibernate的解决方案中,提出了currentSession的概念,hibernate中的current session,可以跟JTA事务绑定,也可以跟当前线程绑定。在hibernate中,session管理着所有的持久化对象的数据。而在EJB3中,EntityManager管理着PersistenceContext,PersistenceContext正是被管理的持久化对象的集合。    

     生命周期

     JPA  实体生命周期分为4种状态,分为:新建,受管(托管),分离(游离),删除。其实跟HIBERNATE的映射实体差不多,大致对应了hibernate中的生命周期:自由状态(Transient)——不受管,持久状态(Persistent)——托管,游离状态(Detached)——分离,只是粒度上有差别。

  



你可能感兴趣的:(orm,jpa)