JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb3规范的一部分。

Hibernate,当今很流行的ORM框架,是JPA的一个实现,但是其功能是JPA的超集。

JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。那么Hibernate是如何实现与JPA的这种关系的呢。Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。

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

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

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

下面重点介绍一下hibernate-entitymanager包的主要类及实现。

HibernatePersistence.java, 实现了JPA的PersistenceProvider接口,它提供createEntityManagerFactory和 createContainerEntityManagerFactory两个方法来创建EntityManagerFactory对象,这两个方法底层都是调用的EJB3Configuration对象的buildEntityManagerFactory方法,来解析JPA配置文件persistence.xml,,并创建EntityManagerFactory对象。

EntityManagerFactory对象的实现是EntityManagerFactoryImpl类,这个类有一个最重要的private属性就是Hibernate的核心对象之一SessionFactory。这个类最重要的方法是createEntityManager,来返回EntityMnagaer对象,而sessionFactory属性也传入了该方法。

EntityManager对象的实现是EntityManagerImpl类,这个类继承自AbstractEntityManagerImpl类,在AbstractEntityManager类中有一个抽象方法getSession来获得Hibernate的Session对象,正是在这个Session对象的实际支持下,EntityManagerImpl类实现了JPA的EntityManager接口的所有方法,并完成实际的ORM操作。

此外,hibernate-entitymanager 包中还有QueryImpl类利用EntityManagerImpl的支持实现了JPA的Query接口;TransactionImpl利用 EntityManagerImpl的支持实现了JPA的EntityTransaction接口。

至此,Hibernate通过hibernate-entitymanager包完成了对于JPA的全部支持工作。

最后,补充一个让我感到意外的问题:

JPA 中的Query对象的getSingleResult()方法,当查询不到结果时,抛出NoResultException、当查询到多个结果时,抛出 NonUniqueResultException;并且NoResultException和NonUniqueResultException都是 RuntimeException。

原文网址:http://hi.baidu.com/tianpaomian/blog/item/fd618bdeed8ef55394ee375d.html

转载于:https://www.cnblogs.com/mutouyaya/p/4917180.html

JPA和Hibernate的关系(转)相关推荐

  1. JPA和Hibernate的关系

    转载自:https://www.cnblogs.com/amoyzhu/p/5937717.html JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb ...

  2. JPA与Hibernate的关系

    1.JPA JPA全称: Java Persistence API   JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.   JPA的出现?    ...

  3. SpringData Jpa、Hibernate、Jpa 三者之间的关系

    JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架--因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服 ...

  4. java jpa hibernate_java - JPA和Hibernate - Criteria与JPQL或HQL

    java - JPA和Hibernate - Criteria与JPQL或HQL 使用Criteria或HQL有哪些优缺点? Criteria API是一种很好的面向对象的方式来表达Hibernate ...

  5. jpa和hibernate_使用JPA和Hibernate有效删除数据

    jpa和hibernate 您可能会遇到必须对关系数据库中存储的大量数据集执行批量删除的情况. 如果您将JPA与Hibernate一起用作基础OR映射器,则可以尝试通过以下方式调用EntityMana ...

  6. gwt-2.8.2下载_GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示

    gwt-2.8.2下载 不久前,我的一个朋友和同事向我飞过,说"世界上只有一半在使用Maven ". 当我意识到最受欢迎的文章(到目前为止) GWT 2 Spring 3 JPA ...

  7. JPA和Hibernate级联类型的初学者指南

    介绍 JPA将实体状态转换转换为数据库DML语句. 由于对实体图进行操作很常见,因此JPA允许我们将实体状态更改从父级传播到子级 . 通过CascadeType映射配置此行为. JPA与Hiberna ...

  8. 使用JPA和Hibernate有效删除数据

    您可能会遇到必须对关系数据库中存储的大量数据集执行批量删除的情况. 如果您将JPA与Hibernate一起用作基础OR映射器,则可以尝试通过以下方式调用EntityManager的remove()方法 ...

  9. GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示

    不久前,我的一个朋友和同事向我飞过,说"世界上只有一半在使用Maven ". 当我意识到最受欢迎的文章(到目前为止) GWT 2 Spring 3 JPA 2 Hibernate ...

最新文章

  1. delphi listview 获取行高_《我的侠客》布料怎么获得 布料获取方法
  2. Metasploit技巧命令支持tips
  3. Netty 解决粘包和拆包问题的四种方案
  4. 算法题:水洼有多少(C++)
  5. Kafka 是如何保证数据可靠性和一致性
  6. Orleans解决并发之痛(一):单线程
  7. java趣事_【趣事】Java程序员最年轻,C++程序员最年老
  8. vue输入框输入触发事件_.vue文件中监听input输入事件oninput详解
  9. 三星GalaxyS21或取消附赠有线耳机:捆绑卖新款无线耳机
  10. 远程win10系统桌面时提示凭证不工作问题的终极解决办法
  11. i春秋 死亡ping命令 原理学习(命令执行+shell反弹)+复现
  12. 研发体系核心代码和文档安全保护方案
  13. 谷歌金山词霸正式发布
  14. 前后分离必备神器,YApi小白部署攻略
  15. vmd python 命令_VMD常用命令
  16. 基于stm32的智能婴儿床(毕业设计)
  17. 直流有刷伺服电机驱动器
  18. 【珍藏版】 2012Java开发工程师必备精品资料(115个)
  19. 蜂鸣器干扰通讯_蜂鸣器常见错误电路分析
  20. 荣耀v30鸿蒙系统怎么升级,荣耀v30pro怎么升级鸿蒙系统

热门文章

  1. java源码之HashMap和HashTable的异同
  2. 【例题 6-6 UVA - 679】Dropping Balls
  3. BZOJ 1444: [Jsoi2009]有趣的游戏
  4. POJ 1661 Help Jimmy DP
  5. CentOS7-64bit 编译 Hadoop-2.5.0,并分布式安装
  6. 如何在MyEclipse中将项目部署Tomcat
  7. android-Activity的执行流程
  8. const常量和readonly常量区别
  9. 关于网络编程中MTU、TCP、UDP、IP
  10. 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”...