Hibernate 和 JPA 的区别
Red Hat 开发了 Hibernate 框架,也称为 Hibernate 对象关系映射器 (ORM)。这个用于 Java 编程语言的对象关系映射工具的第一个版本于 2007 年 5 月 23 日发布。Hibernate 支持跨多个平台工作的 Java 虚拟机 (JVM),并且是用 Java 编写的。
“JPA”代表 Java 持久性 API。它是一个用于管理关系数据的工具。在最基本的形式中,JPA 是一个规范。它处理对象元数据或关系元数据。Java 持久性查询语言 (JPQL) 是 JPA 使用的语言。
什么是 JPA?
在处理大量数据时,几乎每个应用程序都需要执行数据库操作,例如存储和检索数据库中的信息。完成此繁琐的任务通常需要大量时间。
Java 持久性 API (JPA) 对于 Java 开发人员来说是一个极好的选择,因为它有助于减轻使用数据库的工作负担。JPA 是一个 Java 规范,它为用 Java 编写的应用程序提供了将对象映射到关系数据库的功能。它提供了一种持久性管理机制以及一个对象关系映射系统。JPA 负责在内部定义这些映射,而不是依赖于针对各个供应商定制的实现。它依赖于 Object Relational Mapping (ORM) 工具(如 TopLink 和 Hibernate 等)来执行操作,而不是自行执行这些任务。
JPA 表示如何定义一个普通 Java 对象 (也称为 POJO) 作为实体,并通过使用各种元设置来管理它与关系。系统中使用注释或 XML 文件来定义它们。JPA 可以在 Java EE(企业版)容器内部和外部都兼容运行;它用于测试 Java SE 版本的应用程序功能。
以下是用于简化持久性管理的 JPA 的组件:
- 持久化单元
- 实体
- 管理器工厂
- 持久化上下文
- 实体管理器
- 实体对象
什么是 Hibernate?
任何 Java 程序都可以利用 Hibernate 提供的对象关系持久性和查询服务,Hibernate 是一种开源且轻量级的解决方案。它被广泛认为是 Java 持久性 API 最好的实现之一。
Hibernate 有助于将 Java 对象映射到数据库,并减少与持久性相关的频繁编程活动。XML 文件使快速完成此操作成为可能,并且您无需编写任何代码即可执行此操作。如果数据库或任何其表发生修改,则只需要更新 XML 文件的属性。
SQL 的面向对象对应物称为 HQL,它代表 Hibernate 查询语言。它生成单独的数据库查询。因此,无需编写特定于数据库的查询。在实现 Hibernate 之前,每当用于项目的数据库以任何方式修改时,我们都需要修改 SQL 查询。这导致了维护问题。
由于 Hibernate 使您能够自动为数据库构建表,因此不再需要手动创建表。此外,使用此框架,您可以轻松地同时从多个表中检索数据。
以下是 Hibernate 兼容的数据库列表:
- Oracle
- Microsoft SQL Server 数据库
- HSQL 数据库引擎
- DB2/NT
- FrontBase
- Sybase SQL Server
- PostgreSQL
- MySQL
- Informix 动态服务器
JPA 和 Hibernate 的区别
下表重点介绍了 JPA 和 Hibernate 的主要区别:
比较依据 | JPA | Hibernate |
---|---|---|
定义 | 在 Java 应用程序中,关系数据库的管理属于 JPA 的范围。 | Hibernate 是一种对象关系映射 (ORM) 工具,用于将 Java 对象的状态保存在数据库中。 |
包 | 可以在 javax.persistence 包中找到其定义。 | 可以在 org.hibernate 包中找到其定义。 |
实现 | JPA 是一个规范,而不是一个实现。 | Hibernate 是 Java 持久性 API (JPA) 的一个实现,并且符合 API 的通用标准。 |
功能 | 它是标准的应用程序编程接口,使开发人员可以轻松地执行数据库操作。 | 其主要目的是促进将 Java 数据类型映射到数据库表和 SQL 数据类型。 |
接口 | 为了与负责持久性单元的实体管理器工厂进行通信,它使用了 **EntityManagerFactory** 接口。 | 为了生成 Session 实例,它使用了 **SessionFactory** 接口。 |
组件 | 它使用 **EntityManager** 接口来执行创建、读取和删除映射实体类的实例等操作。可以使用此接口与持久化上下文进行交互。 | 为了执行创建、读取和删除映射实体类的实例等操作,它使用了一个名为 Session 的接口。在应用程序运行时,它充当 Java 应用程序和 Hibernate 之间的接口。 |
数据库操作 | 为了执行数据库操作,它使用了一种称为 Java 持久性查询语言 (JPQL) 的面向对象查询语言。 | 为了执行数据库操作,它使用了一种称为 Hibernate 查询语言 (HQL) 的面向对象查询语言。 |
结论
在本文中,我们介绍了 Java 中两个最受欢迎的主题,JPA 和 Hibernate。JPA 是一个规范,而 Hibernate 是一个实现。
JPA 和 Hibernate 都可以减少 Java 开发人员的工作量。在开发任何 Java 程序时,您可以根据您的预期目的使用其中任何一个。
JPA 和 Hibernate 成功地缩小了以前存在于 Java 对象和关系数据库之间的差距。