`
zkh43javaeye
  • 浏览: 85932 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JPA和Hibernate的关系

阅读更多

JPA和Hibernate的关系

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

 

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。

这样有两个问题:

1、我认为getSingleResult方法应该允许查询不到结果的情况存在的,此时它返回null即可,没有必要抛出异常;

2、即使需要在查询不到结果或者查询到多个结果时抛出异常,也不应该抛出RuntimeException,因为这样表示不需要代码显示的用try-catch块来捕获这些异常,也就不会引起用户对这两个异常的重视。

目前解决这个问题我使用的方法是

try{ Object o = query.getSingleResult(); } catch (NoResultException ex){ return null; } catch(NonUniqueResultException ex) { o = queryObject.getResultList();return ((List)o).get(0);}

分享到:
评论

相关推荐

    JPA与Hibernate的优缺点

    而Hibernate,则是在JPA的基础上进一步扩展,提供了更加丰富和灵活的特性,适合于对性能和灵活性有更高要求的应用场景。选择JPA还是Hibernate,最终取决于项目的具体需求、团队的技术栈以及对性能和维护性的考量。...

    jpa + hibernate 例子

    通过这个简单的例子,开发者可以了解如何在实际项目中整合JPA和Hibernate,以及如何使用JUnit进行测试,确保数据操作的正确性和应用程序的稳定性。同时,这也是学习ORM框架和Java持久化的一个基础起点。

    spring mvc 与JPA/Hibernate的整合示例

    在Java Web开发中,Spring MVC和JPA(Java Persistence API)以及Hibernate作为ORM(对象关系映射)框架的实现,是构建高效、可维护性的应用的常见选择。本示例将探讨如何将这三个组件整合在一起,以实现一个完整的...

    jpa中hibernate实现相关jar包

    在标题和描述中提到的"jpa中hibernate实现相关jar包"是指一组完整的Hibernate库,这些库可以帮助开发者在项目中集成JPA和Hibernate,实现对数据库的高效操作。 以下是一些关键的Hibernate JPA相关jar包及其作用: ...

    JPA(hibernate) Dao 和 DaoSupport

    在JPA和Hibernate中,可以使用`Page`或`Slice`接口(Spring Data提供)来实现分页查询,这些接口允许你指定页码和每页大小,返回结果包含当前页的数据以及总页数等信息。 2. **PageIndex.java** - 这个类可能是用于...

    JPA注解 和hibernate 建表

    JPA和Hibernate的关系可以概括为:JPA是一个抽象层次,而Hibernate是一个具体的实现。 七、建表过程 建表过程可以分为两种方式: * 先建表:根据数据库表编写配置文件的实体Bean * 先编写文件和实体Bean,然后...

    JPA-Hibernate包

    **JPA(Java Persistence API)与Hibernate:关系数据库持久化框架** JPA是Java平台上的一个标准,由JSR 317定义,用于管理Java应用程序中的对象持久性。它是Oracle公司提出的,目的是为了简化Java应用程序对关系...

    Spring + JPA + Hibernate配置

    在与JPA和Hibernate的整合中,Spring通常作为容器来管理和协调这些ORM(对象关系映射)工具。 JPA是Java EE平台的一部分,它定义了一个标准的API,允许开发者以面向对象的方式操作数据库。通过JPA,开发者可以避免...

    jpa+HIBERNATE的一个简单例子

    **JPA(Java Persistence API)和Hibernate是两个在Java编程中用于对象关系映射(ORM)的重要工具。本文将深入探讨这两个技术,并通过一个简单的示例来阐述它们如何协同工作。** **一、JPA简介** Java Persistence ...

    jpa(hibernate 持久层)所需要的jar包

    **JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和更新对象的过程。JPA通过提供ORM(Object-Relational Mapping)机制,使得开发者可以...

    搭建一个JPA+hibernate实例

    在Java世界中,Java Persistence API(JPA)和Hibernate是两个非常重要的持久层框架,用于管理应用程序中的对象-关系映射(ORM)。JPA是一种标准的API,而Hibernate是其最流行的实现之一。本教程将指导你如何搭建一...

    Springmvc+JPA(Hibernate4)+redis+activemq

    **JPA(Java Persistence API)与Hibernate** 是Java领域中的对象关系映射(ORM)框架,用于在Java应用中管理和持久化数据。JPA是Java EE的一部分,而Hibernate是其最流行的实现之一。Hibernate4提供了对JPA规范的...

    jpa_hibernate项目 所有jar包

    **JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和更新数据的过程。JPA通过提供对象/关系映射(ORM)功能,使得开发者可以使用面向对象的...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    Hibernate提供了事务管理、缓存机制和一对多、多对一等复杂关系的处理。在项目中,我们需要配置Hibernate的实体类、实体管理工厂以及数据源。 FreeMarker是一个用Java编写的模板引擎,用于生成动态内容。在Web应用...

    用maven构建SpringMVC+JPA+Hibernate+Hsql+jetty的web项目

    在构建这个项目时,首先你需要在pom.xml中配置相应的依赖,包括SpringMVC、JPA、Hibernate、Hsql和Jetty。然后,你需要设置Spring的配置文件(如applicationContext.xml),定义数据源、事务管理器以及SpringMVC的...

    7. JPA - Hibernate【从零开始学Spring Boot】

    Hibernate是JPA的一个实现,它扩展了JPA的功能,并提供了更强大的查询语言(HQL)和二级缓存等功能。在Spring Boot中,我们可以轻松集成Hibernate,只需在配置文件中设置相关属性,Spring Boot会自动配置并管理数据源...

    maven+springjpa+hibernate

    在现代Java开发中,Maven、Spring Data JPA和Hibernate是三个非常重要的工具和技术。Maven是项目管理工具,Spring Data JPA提供了对数据库操作的高级抽象,而Hibernate则是Java持久化层的一个流行实现。将它们整合在...

Global site tag (gtag.js) - Google Analytics