翻译来源:https://www.quora.com/What-is-the-difference-between-Hibernate-and-JPA

本文作者:苏生米沿

本文地址:http://blog.csdn.net/sushengmiyan/article/details/52573247

问题:Hibernate与JPA的区别是什么?

Mohan Singh的回答:

简而言之:Hibernate ORM是JPA规范的一个实现。

wiki百科上的说明:

JPA是一个Java编程语言接口规范,它描述了使用标准JAVA平台和JAVA企业版本的关系型数据的管理。JPA API是JAVA社区专家组关于JSR220的一部分,JPA2.0是JSR317专家组的工作。

所以,JPA提供了一组必须实现的接口,对语言规范的参考实现都是很容易找到的,比如EclipseLink就是一个参考实现。

Hibernaye也实现了规范,但是它还额外拥有自己本身的特性。

如:

public interface AccessAuthenticator {

	public boolean verifyAccess(String username,String saltedPassword);

}

这个规范包含一个接口和一个方法。为了使用这个规范你必须提供verifyAccess()这个方法的自己实现。

实现这个方法会有不同的方法方式,有的厂家会自己在服务器写一个实现。

提供规范的另一方面就是你不比依赖具体的实现,如今你可以使用hibernate orm连接数据库,当后期有更好的ORM实现的时候,你直接替换

实现就可以,比如直接替换jar包。

Vlad Mihalcea,的答复

JPA 仅仅是个规范。它描述了客户端操作使用的接口和标准的对象关系映射元数据(java annotations注解或者XML描述符)。在API定义之

上,JPA也解释了(尽管不是很详尽)这些规范应当怎样去实现。JPA演化成 JAVA EE平台(JAVA EE6 JPA2.0,JAVAEE7 介绍了JPA2.1)

Hibernate原本在JPA规范首次发布的时候就是一个全功能的Java ORM实现。尽管它实现了JPA规范,但是也保留了原生的native api,以保证

可以向后兼容和兼容一些非标准的特性。

尽管遵循JPA规范是最好的,在实际中,很多JPA的实现都提供额外的高性能的数据处理层的特性。为了这个,Hibernate提供了以下几个规

范中没有规定的特性:

1.继承的主键生成(hi.io,pooled,pooled-lo)

2.透明的prepared statement处理

3.自定义的CRUD(@SQLInsert,@SQLUpdate,@SQLDelete)语句

4.静态/动态的实体集合过滤(如@FilterDef,@Filter,@Where)

5.映射属性到SQL片段(如@Forum)

6.不可改变的实体(如@Immutable)

7.更多的flush模式如(FlushMode.MANUAL,FlushMode.ALWAYS)

8.通过给定实体的主键二级缓存

9.实体-级别的并发缓存(如Cache(usage=CacheConcurrencyStrategy.READ_WRITE))

10.通过HQL的大量版本更新

11.乐观锁的字段检查排除(如@OptimisticLock(excluded=true))

12.去版本的乐观锁(如OptimisticLockType.ALL,OptimisticLockType.DIRTY)

13.支持跳过悲观锁的请求(无等待)

14.支持java8Date和Time及stream()

15.支持多重任务处理

Hibernate与JPA的区别是什么的更多相关文章

  1. [转]Hibernate与Jpa的关系,终于弄懂

    原文地址:http://blog.sina.com.cn/s/blog_5f1619e80100yoxz.html 我知道Jpa是一种规范,而Hibernate是它的一种实现.除了Hibernate, ...

  2. Hibernate与Jpa的关系,终于弄懂

    我知道Jpa是一种规范,而Hibernate是它的一种实现.除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实 ...

  3. 数据持久层框架iBatis, Hibernate 与 JPA 比较

    在本文中我们介绍并比较两种最流行的开源持久框架:iBATIS和Hibernate,我们还会讨论到Java Persistence API(JPA).我们介绍每种解决方案并讨论其所规定的品质,以及在广泛 ...

  4. Hibernate与Jpa的关系(2)

    [转自:http://blog.163.com/hero_213/blog/static/398912142010312024809/ ] 近年来ORM(Object-Relational Mappi ...

  5. Hibernate与Jpa的关系(1)

    [转自:http://freewind.me/blog/20111129/588.html ] 我知道Jpa是一种规范,而Hibernate是它的一种实现.除了Hibernate,还有EclipseL ...

  6. 转:spring data jpa、 hibernate、 jpa 三者之间的关系

    原文链接:spring data jpa. hibernate. jpa 三者之间的关系 spring data jpa hibernate jpa 三者之间的关系 JPA规范与ORM框架之间的关系是 ...

  7. Hibernate与Jpa的关系

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA的总体思想和现有Hibernate.T ...

  8. Hibernate or JPA Annotation中BLOB、CLOB注解写法

    BLOB和CLOB都是大字段类型,BLOB是按二进制字节码来存储的,而CLOB是可以直接存储字符串的. 在hibernate or JPA Annotation中,实体BLOB.CLOB类型的注解与普 ...

  9. Hibernate结合JPA编写通用泛型多条件查询

    项目中使用Hibernate和JPA对数据库对象进行实例化,但是生成的方法不支持多条件查询.而如果针对每一个数据库对象进行多条件查询编码,则会变得很麻烦,而且一旦以后发生表结构发生变化,这些方法可能还 ...

随机推荐

  1. The first week CorelDRAW 课总结:

    1.这节课学到了什么知识? 答:(1)认识了CorelDRAW X4的工作界面(由标题栏 菜单栏 工具栏 属性栏 工具箱 页面控制栏 状态栏 绘图区和调色板组成): (2)CorelDRAW X4的基 ...

  2. jmc远程连接windows环境tomcat

    新人报道,先发个小贴赚点人气,本人目前还是小菜鸟,想要飞却怎么也飞不高,哈哈,转到正题,最近发现这个JMC挺好用的,而且也不用像Jprofile需要破解,本地连接挺方便的, 但配置服务器确实挺坑的,按 ...

  3. 减小APK大小

    本篇文章翻译自Reduce APK Size 用户通常不会去下载体积过大的应用程序,特别是当自己的设备连接的是 2G/3G 或者按字节付费的网络.这篇文章描述了如何缩减 APK 的体积大小,以使得更多 ...

  4. 00-深入理解C#读书笔记说明

    带着问题去看书 尝试着,根据每一小节,先列出大纲.然后根据自己原先的认知和理解以及不理解,对每一个小的chapter,我会先自我提问,带着问题去阅读,然后把我的理解以及不理解记录下来,对于错误的地方做 ...

  5. 还原Vue.js的data内的数组和对象

    最近学习Vue.js发现其为了实现对data内的数组和对象进行双向绑定,将数组和对象进行了封装. 如下的对象 todos: [     {         id: 1,         title: ...

  6. CentOS在线安装JDK

    一.通过yum命令在线安装jdk 1.查看云端目前支持安装的jdk版本 [root@localhost ~]# yum search java|grep jdk ldapjdk-javadoc.noa ...

  7. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  8. [LeetCode] Find Bottom Left Tree Value 寻找最左下树结点的值

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...

  9. Python数据类型和数据操作

    python数据类型有:int,float,string,boolean类型.其中string类型是不可变变量,用string定义的变量称为不可变变量,该变量的值不能修改. 下面介绍python中的l ...

  10. [ Java学习基础 ] 浅析Java方法调用

     先看一个示例,读者可先自行阅读判断输出结果: public class TestClass { private static void testMethod(){ System.out.printl ...