Java Persistence API數據庫
從 EJB 技術能夠開始應用時起,對其在實際應用中的可用性就一直存在懷疑。在我看來,產生這種現象最重要的兩個緣由是複雜性和資源密集性。結果,隨後出現了比 EJB 更簡單、具備更小資源空間的框架(好比 Spring 和 Hibernate),而且更快流行開來。爲了說明這一點,咱們注意到 EJB 3.0 規範的方向相對之前出現了一個主要的轉變。做爲 JSR 220 的一部分,該規範提供了相似 Plain Old Java Object (POJO) 支持、Dependency Injection(依賴注入)和註釋等功能。如今引入了一組全新的 API:Java Persistence API (JPA),以容許開發者管理 Java EE(甚至 SE)應用程序中的關係數據。另外,Sun 聲稱 Java Persistence API 表現了一些 Hibernate、TopLink(兩者都會在稍後討論)、JDO 以及 EJB 框架中最好的想法。服務器
當前,GlassFish 項目提供了實施 JPA 的一個參考,JPA 在 GlassFish 應用程序服務器中做爲 TopLink Essential 部分。您能夠在 GlassFish 社區頁 找到該 JPA 參考實施。不要混淆 TopLink Essentials 和 TopLink,前者如今是由 Oracle Corporation 擁有的關係映射工具。稍後我將在本文中討論 TopLink 框架。架構
讓咱們來討論一些您應該考慮應用 JPA 做爲持久化框架的應用場景。框架
什麼時候考慮將JPA做爲持久化框架工具
您選擇從流行的框架(好比 Hibernate、TopLink 和 EJB)中選擇應用具備「好用」的功能且基於標準的框架。性能
您須要輕量級的持久化框架,且不須要 EJB 的容器提供的服務。學習
您須要能夠在標準或 Enterprise Java 應用程序中使用的持久化框架。優化
什麼時候考慮JPA的備選方案設計
您使用的 Java 的版本決定了實際是否能夠應用 JPA。JPA 是 EJB 3.0 規範的一部分,而該規範是 Java EE 5 版本的一部分。若是您未更新到 Java EE 5,則沒法使用 JPA。對象
您的應用程序須要 JPA 沒法提供的服務,好比那些由 EJB 容器提供的服務,在那些狀況下您更依賴 EJB。
在結束對此框架的討論前,讓咱們列出一些使用 JPA 做爲持久化框架的優點和缺點。
JPA有什麼優點?
JPA 是基於標準的。愈來愈多的提供商期待在不久的未來提供 JPA 實施。
它提供了 Hibernate 和 TopLink 中最好的功能。
它能夠和 Java SE 和 Java EE 應用程序一塊兒使用,須要使用 EJB 容器,也能夠不要。
JPA有什麼缺點?
因爲很是新,JPA 規範可能還須要進太重要發展纔會變得很穩定。
JPA 是一個規範而不是一個產品。您須要提供商提供一個實施,才能得到這些基於標準的 API 的優點。
Hibernate
Hibernate 是一個對象持久化框架,簡化了 Java 應用程序和底層關係數據庫之間的對象關係映射。方法是提供 POJO 的透明持久化,做爲「中介」層來提供自動持久化,並從 Java 應用程序加載對象到數據庫表。藉助 Hibernate,保存對象狀態到數據庫和從數據庫加載對象狀態與調用 Java 對象中的方法同樣容易。您無需從您的應用程序代碼中管理底層的數據操做;Hibernate 框架會爲您完成全部的中間步驟。
讓咱們討論一些您將會考慮應用 Hibernate 做爲持久化框架的應用場景,以及那些您將尋求備選方案的應用場景。
什麼時候使用Hibernate做爲持久化框架
您正在尋求一個簡單的持久化框架,該框架容易學習和使用。在您可以實際開始持久化您的 Java 對象到目標數據庫以前,您只須要了解幾個映射配置文件。
您正在尋求一個很是普通和靈活的持久化框架。Hibernate 的用法很是靈活:不管是否有應用程序服務器均可以使用,不管是否有關係數據庫系統也可使用。
您不想支付獲取和維護費用。Hibernate 是開源並且免費的。
Hibernate 框架很是值得應用,由於它很是簡單和靈活,同時也很強大。可是,在如下一些應用場景中您可能想要考慮應用其餘框架。
什麼時候考慮Hibernate的備選框架
您還不想要其餘框架。儘管簡單,Hibernate 框架仍然有本身的學習曲線、維護/更新週期,等等。
您須要容器提供的服務,好比那些由 EJB 提供的服務,在那些狀況下您的選擇侷限於 EJB。
若是您正在使用或計劃使用 Hibernate 做爲您的持久化框架,這裏是一些它的優點和缺點。
Hibernate有什麼優點?
Hibernate 易於學習和使用。正如我在上面提到的,在您可使用它以前,您只須要了解幾個簡單、自我描述的配置文件。
它 很是靈活。您能夠在任何須要持久化服務的應用程序架構中使用 Hibernate。您能夠經過 Servlet 和/或 Enterprise Java Bean 在 Standard Java 應用程序、Enterprise Java 應用程序中使用它。它也能夠和 Spring 框架很好地集成。
它能夠很好地向上擴展,由於它被設計爲從底層一直到集羣環境中工做。經過相似 Lazy Initialization 的技術以及經過 CGLIB 運行時間字節代碼生成庫優化 Java 反射,最新版的 Hibernate 的性能也獲得了增強。
Hibernate有什麼缺點?
Hibernate 是另外一個擁有本身的應用和維護週期的框架。
儘管有積極的社區支持,可是有時候缺少專一於此產品的提供商也使得宣傳應用此框架顯得沒有說服力。