JPA與Hibernate
幾乎所有的企業應用程序都需要定期訪問關係數據庫。但是早期技術(如JDBC)面臨的一個問題是阻抗不匹配(面向對象技術和關係技術之間的差異)。通過引入一個名為Persistence layer的抽象層來解決這個問題,該層封裝了來自業務邏輯的數據庫訪問。JPA(javapersistenceapi)是一個專門用於管理Java應用程序中的關係數據(使用持久層)的框架。在Java開發人員社區中有許多JPA的供應商實現。Hibernate是最流行的JPA實現(DataNucleus、EclipseLink和OpenJPA是其他一些實現)。最新的JPA版本(jpa2.0)完全受hibernate3.5的支持,hibernate3.5於2010年3月發佈。
什麼是JPA?
JPA是一個用於管理Java關係數據的框架。它可以與使用JSE(Java平臺,標準版)或JEE(Java平臺,企業版)的應用程序一起使用。它的當前版本是jpa2.0,發佈於2009年12月10日。JPA取代了EJB2.0和EJB1.1實體bean(Java開發人員社區強烈批評這兩個實體bean是重量級的)。儘管EJB中的實體bean提供了持久化對象,但是許多開發人員習慣於使用DAO(數據訪問對象)和其他類似框架提供的相對輕量級的對象。因此,引入了JPA,它捕獲了上面提到的框架的許多精巧的特性。
JPA中描述的持久性涵蓋了API(定義見javax.持久性)關係對象所需的JPQL(Java平臺,企業版)和元數據。持久化實體的狀態通常持久化到表中。實體的實例對應於關係數據庫表的行。元數據用於表示實體之間的關係。註釋或單獨的XML描述符文件(與應用程序一起部署)用於指定實體類中的元數據。JPQL類似於SQL查詢,用於查詢存儲的實體。
什麼是冬眠?
Hibernate是一個可用於Java編程語言的對象關係映射的框架。更具體地說,它是一個ORM(object-relational-mapping)庫,可以用來將對象關係模型映射到傳統的關係模型中。簡單地說,它在關係數據庫中的Java類和表之間,以及Java到SQL數據類型之間創建一個映射。Hibernate還可以通過生成SQL調用來查詢和檢索數據。因此,程序員不再需要手動處理結果集和轉換對象。Hibernate是在GNU許可下發布的一個免費的開源框架。hibernate3.2及更高版本中提供了jpaapi的實現。加文·金是Hibernate的創始人。
JPA和Hibernate有什麼區別?