一、概述


JPA(Java Persistence API,Java持久化API),定义了对象-关系映射(ORM)以及实体对象持久化的标准接口。
JPA是JSR-220(EJB3.0)规范的一部分,在JSR-220中规定实体对象(EntityBean)由JPA进行支持。
所以JPA不局限于EJB3.0,而是作为POJO持久化的标准规范,可以脱离容器独立运行,开发和测试更加方便。
JPA在应用中的位置如下图所示:



JPA和Hibernate浅析_hibernate



JPA维护一个Persistence Context(持久化上下文),在持久化上下文中维护实体的生命周期。主要包含三个方面的内容:

  1. ORM元数据。JPA支持annotion或xml两种形式描述对象-关系映射。
  2. 实体操作API。实现对实体对象的CRUD操作。
  3. 查询语言。约定了面向对象的查询语言JPQL(Java Persistence Query Language)。


JPA的主要API都定义在javax.persistence包中:



 

org.hibernate

javax.persistence

说明

cfg.Configuration

Persistence

读取配置信息

SessionFactory

EntityManagerFactory

用于创建会话/实体管理器的工厂类

Session

EntityManager

提供实体操作API,管理事务,创建查询

Transaction

EntityTransaction

管理事务

Query

Query

执行查询



流程图:




JPA和Hibernate浅析_hibernate_02






二、比较


 JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个。从功能上来说,JPA现在就是Hibernate功能的一个子集。


 例如: 

  (1)实体对象的状态,在Hibernate有自由、持久、游离三种,JPA里有new,managed,detached,removed,而这些状态都是一一对应的。

  (2)flush方法,都是对应的,

  (3)Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了  manager



 JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。


  Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。
  (1)hibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及  Hibernate自身特殊功能的annotation。
  (2)hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能。
  (3)hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。