zoukankan      html  css  js  c++  java
  • Hibernate与JPA的区别是什么

    翻译来源: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.支持多重任务处理







  • 相关阅读:
    Linux学习笔记:【004】Linux内核代码风格
    ARM寄存器介绍
    2013 HTML5中国峰会演讲:Android上的HTML5:过去,现在和将来
    Ubuntu下编译SHTOOLS
    反对网抄,没有规则可以创建目标"install" 靠谱解答
    使用MTL库求解最小二乘解
    反对抄袭 正解spring的@Autowired 不要相信网上的错误版本
    浅析GDAL库C#版本支持中文路径问题(续)
    浅析GDAL库C#版本支持中文路径问题
    GDAL库调试(包括跨语言调试)
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152443.html
Copyright © 2011-2022 走看看