JPA和Hibernate浅析

一、概述

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


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是需要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的规范。

总的来说:JPA是规范,Hibernate是框架,JPA是持久化规范,而Hibernate实现了JPA。




更多请查看:http://blog.sina.com.cn/s/blog_5f1619e80100yoxz.html
                    

### JPAHibernate的关系 Java Persistence API(JPA)是一个用于对象关系映射的标准规范,定义了一组接口注解来管理持久化数据[^1]。而Hibernate框架则是实现了这些标准的一个具体ORM工具。 #### 关系描述 - **抽象层面上**:JPA提供了统一的对象模型到数据库表之间的映射机制;它并不提供具体的实现细节而是由不同的供应商去完成这部分工作。 - **实际应用中**:当开发者使用JPA时可以选择多种兼容它的ORM解决方案之一作为底层支持——其中最流行的就是Hibernate。因此可以说,在很多情况下,Hibernate充当着JPA的具体执行者角色[^4]。 ### 主要差异对比 | 特性 | JPA | Hibernate | | -- | | 类型 | 接口/规范 | 实现类库 | | 功能范围 | 定义API服务契约 | 提供完整的ORM功能集 | | 易用程度 | 更加灵活但可能需要额外配置 | 开箱即用,默认设置较多 | 在保存实体方面,如果采用纯JDBC方式,则所需的代码量通常会超过两倍甚至接近三倍于使用像Hibernate这样的持久化框架的情况。这是因为后者简化了很多重复性的操作流程,并且使得业务逻辑更加清晰明了[^2]。 另外值得注意的是,在Hibernate内部存在两个重要的组件: - `SessionFactory` 是整个应用程序生命周期内唯一存在的对象,负责创建Session实例并维护它们的状态; - `Session` 则代表一次短暂的应用程序与持久存储间的对话过程,它是非线程安全的设计,主要用于封装SQL连接以及事务处理等功能[^3]。 综上所述,虽然两者紧密关联,但是各自扮演的角色不同:JPA侧重于制定规则,而Hibernate则致力于遵循这些规定的同时提供更多实用特性给开发人员使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值