JPA和Hibernate的关系(转)
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的关系(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 画出图中杆AB、杆CD及整体的受力图。
- 下一篇: 【Win10开发】自定义标题栏