jpa和hibernate之间的相似性和区别是什么。
答案 0 :(得分:15)
JPA(Java Persistence API)是持久性提供程序要实现的接口。 Hibernate就是JPA的一个这样的实现。
答案 1 :(得分:14)
这是JSR-000220 Enterprise JavaBeans 3.0最终版本(持久性)的介绍:
本文档是用于管理持久性和对象/关系的Java API的规范。 使用Java EE和Java SE进行映射。这项工作的技术目标是提供一个 使用Java域模型的Java应用程序开发人员的对象/关系映射工具 - 关系数据库。
此持久性API - 与本文档中定义的查询语言和对象/关系映射元数据一起 - 需要在Enterprise JavaBeans 3.0下受支持。它还旨在与Java SE单独使用。
整个Java社区的领先专家共同构建了这个Java持久性标准。这项工作包含来自Hibernate,TopLink和JDO社区以及EJB社区的贡献。
换句话说,JPA是用于持久性的标准化 API。 Hibernate提供了标准的实现(即,它可以在使用JPA时用作底层持久性引擎)。
在JPA之前,Hibernate是Java中对象持久性的事实标准。 Hibernate被认为是JPA的主要贡献者,因此它们之间存在许多相似之处(我甚至可以说所有ORM解决方案都是常见的ORM概念)。但是,由于各种原因,政治或技术原因,JPA工作组无法在JPA的第一个版本中包含所有内容,因此JPA实际上是Hibernate的一个子集(这是一个简化的视图但实际情况非常接近)。因此,Hibernate和其他JPA实现提供了他们自己的专有扩展(这意味着非标准,即不能从一个提供者移植到另一个提供者)到你可能使用或不使用的JPA标准。
答案 2 :(得分: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
。
EntityManager
和EntityManagerFactory
实际上分别是Session
和SessionFactory
的薄包装。此外,核心/注释Hibernate提供了JPA规范的扩展,使您的生活更轻松。在JPA 2之前,Hibernate有一个Criteria API,它允许您以OO方式以编程方式构造查询。 JPA 2现在使这个功能成为标准 - JPA标准与Hibernate版本略有不同,因为它使用了泛型。所以基本上Hibernate功能是JPA的超集。
答案 3 :(得分:1)
以下列出了主题之间的一些区别(摘自Hibernate文档)
实体。 Hibernate超越了JPA规范并提供了其他配置。其中一些托管在@ org.hibernate.annotations.Entity
上id作为使用组件类型的属性
没有标识符类型的多个id属性
具有专用标识符类型
的多个id属性标识符生成器
注解
鉴别
交易
静态元模型