jpa和hibernate之间的相似性和区别

Sat*_*tya 16 java orm hibernate jpa

jpa和hibernate之间有什么相似之处和区别.

Jef*_*ter 15

JPA(Java Persistence API)是持久性提供程序要实现的接口.Hibernate就是JPA的一个这样的实现.


Pas*_*ent 14

这是JSR-000220 Enterprise JavaBeans 3.0最终版本(持久性)的介绍:

本文档是Java API的规范,用于管理使用Java EE和Java SE的持久性和对象/关系映射.这项工作的技术目标是为Java应用程序开发人员提供一个对象/关系映射工具,使用Java域模型来管理关系数据库.

Enterprise JavaBeans 3.0需要支持此持久性API以及本文档中定义的查询语言和对象/关系映射元数据.它还旨在与Java SE单独使用.

整个Java社区的领先专家共同构建了这个Java持久性标准.这项工作包含来自Hibernate,TopLink和JDO社区以及EJB社区的贡献.

换句话说,JPA是持久性的标准化 API.Hibernate提供了标准的实现(即,它可以在使用JPA时用作底层持久性引擎).

在JPA之前,Hibernate是Java中对象持久性的事实标准.Hibernate被认为是JPA的主要贡献者,因此它们之间存在许多相似之处(我甚至可以说所有ORM解决方案都是常见的ORM概念).然而,由于种种原因,政治或技术,JPA的工作组可以不包括在JPA的第一个版本一切都那么JPA实际上是休眠的一个子集(这是一个简化的看法,但现实很接近).因此,Hibernate和其他JPA实现提供了他们自己的专有扩展(这意味着非标准,即不能从一个提供者移植到另一个提供者)到您可能使用或不使用的JPA标准.


non*_*tor 9

正如@Pascal所指出的,Hibernate存在于JPA标准之前(它现在是JSR 317 JPA 2.0,Hibernate已经在3.5中实现了早期使用).所以还有其他JPA提供者,例如Oracle TopLink,Apache OpenJPA.要在Hibernate中严格使用JPA,你必须使用它EntityManager作为Session一个早期约会JPA的Hibernate概念.同样对于严格的JPA,您必须使用EntityManagerFactory与之相关的SessionFactory.

EntityManagerEntityManagerFactory,实际上,围绕薄包装SessionSessionFactory分别.此外,核心/注释Hibernate提供了JPA规范的扩展,使您的生活更轻松.在JPA 2之前,Hibernate有一个Criteria API,它允许您以OO方式以编程方式构造查询.JPA 2现在使这个功能成为标准 - JPA标准与Hibernate版本略有不同,因为它使用了泛型.所以基本上Hibernate功能是JPA的超集.