JPA和Hibernate

jpa和hibernate之间是什么关系呢?

JPA:本身是一种规范,它的本质是一种ORM规范(不是ORM框架,因为JPA并未提供ORM实现,只是制定了规范)因为JPA是一种规范,所以,只是提供了一些相关的接口,但是接口并不能直接使用,JPA底层需要某种JPA实现,JPA现在就是Hibernate功能的一个子集

JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现,并不是对标关系,借用下图可以看清楚他们之间的关系,Hibernate属于遵循JPA规范的一种实现,但是JPA是Hibernate遵循的规范之一,Hibernate还有其他实现的规范,所以它们的关系更像是JPA是一种做面条的规范,而Hibernate是一种遵循做面条的规范的汤面,他不仅遵循了做面条的规范,同时也会遵循做汤和调料的其他规范,他们之间并不是吃面条和吃米饭的关系。
在这里插入图片描述

1.JPA

JPA全称: Java Persistence API,JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA的出现有两个原因:
其一,简化现有Java EE和Java SE应用的对象持久化的开发工作;
其二,Sun希望整合对ORM技术,实现持久化领域的统一。

Sun之所以提出JPA规范,其目的是以官方身份来统一各种ORM框架的规范,包括著名的Hibernate、TopLink等
不过JPA规范给开发者带来了福音:开发者面向JPA规范的接口,但底层的JPA实现可以任意切换:觉得Hibernate好的,可以选择Hibernate JPA实现;觉得TopLink好的,可以选择TopLink JPA实现……这样开发者可以避免为使用Hibernate学习一套ORM框架,为使用TopLink又要再学习一套ORM框架

JPA提供的技术:

(1)ORM映射元数据
JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

(2)JPA 的API
用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

(3)查询语言
通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合

2. Hibernate

JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个。

例如:

(1)实体对象的状态,在Hibernate有自由、持久、游离三种,JPA里有new,managed,detached,removed,而这些状态都是一一对应的。

(2)flush方法,都是对应的,

(3)Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了 manager

3. JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。

那么Hibernate是如何实现与JPA 的这种关系的呢?

Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。

(1)hibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及 Hibernate自身特殊功能的annotation。

(2)hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能。

(3)hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。

总的来说,JPA是规范,Hibernate是框架,JPA是持久化规范,而Hibernate实现了JPA。

题外的一些思考:如果抛开JPA直接使用Hibernate的注解来定义一个实例,很快发现了几个问题:

jpa中有Entity, Table,hibernate中也有,但是内容不同
jpa中有Column,OneToMany等,Hibernate中没有,也没有替代品
hibernate对jpa的支持,不是另提供了一套专用于jpa的注解。一些重要的注解如Column, OneToMany等,hibernate没有提供,这说明jpa的注解已经是hibernate 的核心,hibernate只提供了一些补充,而不是两套注解。要是这样,hibernate对jpa的支持还真够足量,我们要使用hibernate注解就必定要使用jpa。

两个额外的问题:

第一个是问如果想用hibernate注解,是不是一定会用到jpa的。网友的回答:“是。如果hibernate认为jpa的注解够用,就直接用。否则会弄一个自己的出来作为补充”

第二个是问,jpa和hibernate都提供了Entity,我们应该用哪个,还是说可以两个一起用?网友回答说“Hibernate的Entity是继承了jpa的,所以如果觉得jpa的不够用,直接使用hibernate的即可”

另外一个个人理解如下:
jpa 是规范
hibernate实现了这个规范
spring data jpa对hibernate进行了封装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JPA(Java Persistence API)和Hibernate是两种在Java平台上用于对象关系映射(ORM)的技术。 JPA是Java EE规范中定义的一套ORM接口,它为开发人员提供了一种标准的方式来访问持久化数据。而Hibernate是一个实现了JPA规范的ORM框架,它提供了强大的对象关系映射功能以及其他与持久化相关的特性。 以下是JPAHibernate之间的一些区别: 1. 概念层面:JPA是一种规范,而Hibernate是实现该规范的一个框架。 2. 灵活性:JPA是一种标准化的接口,允许开发人员在不同的JPA实现之间进行切换。因此,使用JPA可以更容易地切换到其他ORM框架,而不仅仅局限于Hibernate。 3. 学习曲线:由于JPA是一个较为抽象的接口,学习和使用JPA可能需要更多时间和学习成本。相比之下,Hibernate提供了更具体和易于理解的API,并且有更多的文档和教程可供参考。 4. 生态系统:Hibernate是一个成熟且广泛使用的ORM框架,拥有强大的社区支持和丰富的生态系统。它提供了丰富的功能和性能优化选项。虽然JPA也有一些实现,但Hibernate被认为是JPA最常用和最流行的实现之一。 总结起来,JPA是Java EE规范中定义的一套ORM接口,而Hibernate是一个实现了JPA规范的强大ORM框架。通过使用JPA,开发人员可以获得更高的灵活性和可移植性,而Hibernate则提供了更具体和易于使用的API以及丰富的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值