JPA(Java Persistence API)是 Java EE(现 Jakarta EE)的官方 ORM 标准规范,而 Hibernate 是一个实现了 JPA 规范的具体 ORM 框架。它们的关系类似于 JDBC 规范 和 MySQL JDBC 驱动的关系。
一、JPA 是什么?
-
定位
JPA 是一套 Java 持久化标准接口(定义在javax.persistence
或jakarta.persistence
包中),由 Java 社区(JSR)制定,目的是统一不同 ORM 框架(如 Hibernate、EclipseLink、OpenJPA)的操作方式。 -
核心接口
接口 作用 对应 Hibernate 接口 EntityManagerFactory
创建 EntityManager
(线程安全)SessionFactory
EntityManager
核心操作接口(非线程安全) Session
EntityTransaction
管理事务 Transaction
Query
/TypedQuery
执行 JPQL 查询 Hibernate Query
CriteriaBuilder
构建类型安全的查询 替代 Hibernate Criteria
-
主要特性
- 基于注解或 XML 的实体映射(如
@Entity
,@Table
,@Id
) - 支持 JPQL(面向对象的查询语言)
- 类型安全的
CriteriaQuery
动态查询 - 实体生命周期管理(
persist()
,merge()
,remove()
) - 一级/二级缓存支持
- 基于注解或 XML 的实体映射(如
二、JPA 与 Hibernate 的核心区别
维度 | JPA | Hibernate |
---|---|---|
性质 | 官方标准规范(一组接口) | 具体 ORM 实现框架 |
目的 | 统一 ORM 操作,避免厂商锁定 | 提供高性能、全功能的 ORM 解决方案 |
实现方式 | 需依赖实现库(如 Hibernate) | 独立运行,直接操作数据库 |
API 包名 | javax.persistence.* |
org.hibernate.* |
查询语言 | JPQL(标准化) | HQL(功能更强大,兼容 JPQL) |
原生特性 | 仅支持标准功能 | 额外提供: - 增量更新( @DynamicUpdate )- 自定义类型( UserType )- 更灵活的缓存控制 |