JPA与ORM与Hibernate有何区别?

74

我通过各种资源了解它们,其中重要的资源包括:

  1. 维基百科关于它们的文章
  2. JPA和Hibernate之间的区别是什么?

以下是我对它们之间区别的理解。我不确定我在JPA与ORM方面是否正确

  1. ORM:对象关系映射是将数据从面向对象语言转换为关系型数据库或反向转换的概念/过程。 例如,在Java中,它通过反射和jdbc来完成。

  2. Hibernate:它是上述概念的实现。

  3. JPA:它是高级别API和规范,以便不同的ORM工具可以实现,从而提供灵活性,使开发人员可以将实现从一个ORM更改为另一个 (例如,如果应用程序使用JPA api和实现是Hibernate。将来,如果需要,它可以切换到IBatis。但另一方面,如果应用程序直接锁定实现 使用Hibernate而没有JPA平台,则切换将是困难的任务)

ORM可以有带/不带JPA规范的实现。例如,根据此链接在hibernate部分下, 仅Hibernate 3.2及更高版本提供了Java Persistence API的实现。


你说得完全正确。ORM只是一个概念的名称,用于将面向对象映射到关系型数据库。JPA是Java持久化API,作为JavaEE规范的一部分进行了规定。Hibernate是该API的实现之一。有许多版本的JPA,不同版本的Hibernate实现了不同版本的JPA API。 - Boris the Spider
3
我不确定为什么我的帖子在发布后5秒钟内就收到了负评。如果给我负评的人能提供反馈意见,我会很感激,这样我下次就可以改进了。 - M Sach
@BoristheSpider 谢谢。我对 JPA 的理解也是正确的吗? - M Sach
1
大部分已经完成了。JPA不是一个“高级”API,它只是ORM框架的规范。它非常类似于Java Servlet API或Java Transaction API等 - 都是JavaEE的一部分。iBATIS不是JPA实现。 - Boris the Spider
那么,这里的问题是什么? - Vladimir Vaschenko
6
"我不确定我对JPA和ORM的区别是否正确" 暗示着 "我关于JPA和ORM的理解是否正确?" 所以我认为这是一个问题,可能有些人只是喜欢给踩。 - Arthur
3个回答

56
  1. ORM是将面向对象的数据映射到关系型数据存储(例如RDBMS中的表)的方法。

  2. JPA是Java EE标准规范,用于在Java EE中进行ORM。

  3. JPA的参考实现是EclipseLink。如果您没有明确配置提供程序,则会在底层使用EclipseLink。

  4. Hibernate是JPA规范的另一种实现方式,您可以使用标准的JPA API并配置应用程序以使用Hibernate作为规范的提供者。

  5. Hibernate还提供了超出JPA规范的ORM功能的超集,这意味着它不仅提供了JPA API的实现,而且还提供了JPA规范之外的更多功能。


2
@HalfBloodPrince, 正如Kevin上面所说,ORM是将对象映射到关系数据库表的方法。任何提供对象-数据库表映射机制的框架都被称为ORM框架。 Hibernate是在JPA规范出现之前就已经存在于市场上的ORM框架。早期有他们自己的Hibernate实现(一个ORM框架),之后Hibernate创建了JPA的实现。 今天,Hibernate有两种类型的实现:1.自己的实现 2.JPA实现。 - Rakesh Bhalani
1
@RakeshBhalani 我认为更清晰的说法是,Hibernate 的一部分功能提供了 JPA 规范的实现,并且除此之外,Hibernate 还提供了超出 JPA 规范要求的其他功能。换句话说,Hibernate 的 JPA 部分是 Hibernate 提供的完整功能集合的一个子集。 - Kevin Hooke

3
你在理解上唯一的错误似乎是
它比ORM高级一步。
一个快速的注释,以javax.persistence开头的库与JPA相关联。尽可能使用这些库,而不是Hibernate库。因为这些是可移植的。然而,在Hibernate中你会得到一些额外的功能,在那些特定的情况下,请随意使用Hibernate。

0
Hibernate对象关系映射也被称为对象关系映射。Hibernate实际上是JPA的一种实现。JPA是一个允许我们在Java中执行ORM操作的API。多亏了Hibernate,我们可以在对象和数据库表之间建立连接。由于这个安装,我们可以在数据库上执行插入、删除和更新操作。
ORM:它是用于对象关系映射的工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接