JPA和Hibernate的疑惑

一直对JPA规范和Java EE中提供的javax.persistence包下的内容有疑惑。

Hibernate 是对 JPA 规范的一种实现, 那么 Java EE 包下的 javax.persistence 也是对 JPA规范的一种实现吗?

那么 Hibernate 和 javax.persistence 中提供的内容有什么区别呢?可以理解为一套规范的两种实现么?

阅读 2.5k
2 个回答

请看hibernate 文档 hibernate文档Architecture这节

javax.persistence 是JPA规范定义的一套接口,相当于定义了一套规范。
hibernate 是规范的实现,是接口的实现。

根据Hibernate官网的定义,Hibernate既有自己原生的API,但本身也是JPA规范的实现❶。然后根据Oracle官网链接的JPA指南的说法,JPA设计时也从Hibernate等持久化技术中获得灵感❷。

这时候你可能有疑惑了——“What?! JPA是接口规范,Hibernate是JPA的实现,而JPA的设计居然参考了Hibernate?!不是应该先有接口,然后才有实现吗?”。好吧,这不是一个先有鸡还是先有蛋的问题。-_-||

是这样的,Hibernate一开始就是一个独立标准的类库,那时候JPA规范还没有诞生。后来JPA作为EJB3.0的一部分被提出时,其设计参考自Hibernate等当时先有的持久化技术。但JPA毕竟是由JCP提出的规范、“出身不凡”,所以随着JPA的发展壮大,Hibernate后来在3.2版本❶时反过来开始支持了JPA。

简单来说就是:JPA是一套ORM的规范,Hibernate既是一个独立的ORM类库,也是JPA的规范实现类库。然而JPA的设计本身也参考了Hibernate


【注释】
❶原文为:In addition to its own "native" API, Hibernate is also an implementation of the Java Persistence API (JPA) specification. 具体参见:Your relational data. Objectively. - Hibernate ORM
❷原文为:The Java Persistence API draws on ideas from leading persistence frameworks and APIs such as Hibernate, Oracle TopLink, and Java Data Objects (JDO), and well as on the earlier EJB container-managed persistence. 具体参见:The Java Persistence API - A Simpler Programming Model for Entity Persistence
❷参见:Releases - Hibernate ORM

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏