Hibernate和JPA
传统上,Java应用程序使用JDBC(Java数据库连接)等技术来访问关系数据库,以便持久存储数据。主要问题是面向对象技术和关系技术之间的差异。 JDBC API需要开发人员手动编写SQL中最原始的CRUD(创建,读取,更新和删除)操作,这些操作缺乏可移植性。
此外,代码完全依赖于SQL,这不是关系数据库的标准规范,这将使从一个数据库到另一个数据库的转换更加困难。问题是关系技术侧重于数据及其关系,而面向对象的范式不仅强调数据,还强调对其执行的操作。这导致物体 - 关系阻抗不匹配。一种被广泛接受的解决方案是对象关系映射(ORM)。
什么是Hibernate?
Hibernate是一种用于Java编程语言的ORM(对象/关系映射)框架,它与数据持久性有关。它只是一个开源的对象关系映射解决方案,它将Java类映射到关系数据库中的数据库表以及从Java到SQL数据类型。它是一个在GNU许可下分发的轻量级ORM框架,旨在为开发人员提供透明的机制来实现持久性。它使用类似于SQL的强大查询语言HQL(Hibernate查询语言的简称),它可以快速地与现有应用程序和新应用程序集成,而无需更改应用程序的其余部分。此外,它完全符合面向对象的概念,如继承,多态和关联。最好的部分,它不需要您修改应用程序类来实现持久性。
什么是JPA?
Java Persistence API(JPA)是一种描述对象关系映射和持久对象管理接口的规范。除了API定义之外,它还定义了有关如何实现对象关系映射的规则和指南集,以及如何使这些规范与所有JPA提供程序兼容。 Hibernate是JPA指南中最先进和广泛使用的ORM实现。 JPA简单地提供了对象/关系映射平台,用于管理Java对象/类与Java应用程序中的关系数据库之间的数据。它是为JPA实现供应商设计的接口规范,旨在为ORM实现创建标准,以满足高性能数据访问层要求。 Hibernate是最受欢迎的JPA供应商。
Hibernate和JPA之间的区别
Hibernate和JPA的基础知识
JPA是Java Persistence API的缩写,是使用Java平台,标准版(Java,SE)和Java平台,企业版(Java,EE)访问,管理和保存应用程序中数据的规范。另一方面,Hibernate更像是一种符合JPA规范的ORM实现工具。
Hibernate和JPA的目的
JPA是Java中对象关系映射的规范,允许开发人员更快更有效地执行数据库操作,从而允许与数据库轻松交互。它是持久性和对象关系映射的标准API,为开发人员提供了数据绑定操作的几个优势。 Hibernate是一个开源的Object关系映射工具,它简化了Java应用程序的开发,使得连接数据库变得前所未有的简单。
Hibernate和JPA的可靠性
JPA的问题在于,它只是一个没有提供任何实现类的规范。 API只是按照JPA供应商遵循的一组特定规则和规则将数据持久存储到数据库中的类和方法的集合。 Hibernate是许多JPA实现供应商之一,它在支持JPA的任何环境中实现JPA规范,包括Java SE和Java EE应用程序服务器。
Hibernate和JPA中的功能
除了是最受欢迎的JPA实现供应商之外,Hibernate框架还保留了其原生API,以促进向后兼容性以及适应非标准功能。 Hibernate附带了Java Persistence API不支持的几个功能,例如扩展标识符生成器,新的Date和Time API,可重复注释,steam查询结果,可自定义的CRUD语句,不可变实体,自然ID支持,不相关实体的ad hoc连接等
EntityManager与Session
EntityManager是JPA规范实现的标准,在所有实现中都是相同的。相反,如果你想使用Hibernate API,那么你将使用Hibernate特定的Session来处理持久性。但是,如果您选择使用Session,则无法迁移到新的供应商,因为它仅限于Hibernate API。
Hibernate与JPA:比较图表
Hibernate与JPA的总结
几乎所有企业应用程序都需要某种方式来持久存储数据。它对企业应用程序至关重要,因为它需要访问关系数据库。持久性是应用程序开发中的一个基本概念,由于需要以快速高效的方式将分层结构化Java对象序列化到数据库,因此本身就是一项挑战。虽然持久性已经成为Java社区讨论的热门话题,但许多开发人员甚至都不同意问题的范围。在面向对象语言的上下文中,持久性意味着即使在创建数据的过程结束后,数据仍然可以访问。有许多方法可以持久存储数据。 Hibernate就是这样一个项目,旨在为Java中的持久性问题提供完整的解决方案,而JPA是一个管理持久数据和对象关系映射的规范。