JPA全稱Java Persistence API.JPA經過JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。sql
JPA支持XML和JDK5.0註解兩種元數據的形式,元數據描述對象和表之間的映射關係,框架據此將實體對象持久化到數據庫表中;(xml和註解的使用根據公司框架搭建者最初設計)數據庫
用來操做實體對象,執行CRUD操做,框架在後臺替咱們完成全部的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。緩存
這是持久化操做中很重要的一個方面,經過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。session
JPA是須要Provider來實現其功能的,Hibernate就是JPA Provider中很強的一個,應該說無人能出其右。從功能上來講,JPA就是Hibernate功能的一個子集。Hibernate 從3.2開始,就開始兼容JPA。Hibernate3.2得到了Sun TCK的JPA(Java Persistence API) 兼容認證。框架
只要熟悉Hibernate或者其餘ORM框架,在使用JPA時會發現其實很是容易上手。例如實體對象的狀態,在Hibernate有自由、持久、遊離三種,JPA裏有new,managed,detached,removed,明眼人一看就知道,這些狀態都是一一對應的。再如flush方法,都是對應的,而其餘的再如說Query query = manager.createQuery(sql),它在Hibernate裏寫法上是session,而在JPA中變成了manager,因此從Hibernate到JPA的代價應該是很是小的ide
一樣,JDO,也開始兼容JPA。在ORM的領域中,看來JPA已是王道,規範就是規範。在各大廠商的支持下,JPA的使用開始變得普遍。性能
Spring + Hibernate 經常被稱爲 Java Web 應用人氣最旺的框架組合。而在 JCP 經過的 Web Beans JSR ,卻欲將JSF + EJB + JPA 、來自 JBoss Seam(Spring 除外)的一些組件和EJB 3(可以提供有基本攔截和依賴注入功能的簡化 Session Bean框架)的一個 Web 組合進行標準化。Spring 2.0 爲 JPA 提供了完整的 EJB容器契約,容許 JPA在任何環境內能夠在 Spring 管理的服務層使用(包括 Spring 的全部DI 和 AOP加強)。同時,關於下一個Web應用組合會是 EJB、Spring + Hibernate 仍是 Spring + JPA 的論戰,早已充斥於耳。spa
在Spring 2.0.1中,正式提供對JPA的支持,這也促成了JPA的發展,要知道JPA的好處在於能夠分離於容器運行,變得更加的簡潔。設計
OpenJPA 是 Apache 組織提供的開源項目,它實現了 EJB 3.0 中的 JPA 標準,爲開發者提供功能強大、使用簡單的持久化數據管理框架。OpenJPA 封裝了和關係型數據庫交互的操做,讓開發者把注意力集中在編寫業務邏輯上。OpenJPA 能夠做爲獨立的持久層框架發揮做用,也能夠輕鬆的與其它 Java EE 應用框架或者符合 EJB 3.0 標準的容器集成。xml
支持的實現包括Toplink、Hibernate Entitymanager等。TopLink之前須要收費,現在開源了。OpenJPA雖然免費,但功能、性能、普及性等方面更加須要加大力度。
對於EJB來講,實體Bean一直是被批評的對象,因爲其太複雜和龐大。JPA的出現,很大程度的分離了複雜性。這讓EJB的推廣也變得容易。
總而言之,JPA規範主要關注的僅是API的行爲方面,而由各類實現完成大多數性能有關的調優。儘管如此,全部可靠的實現都應該擁有某種數據緩存,以做爲選擇。希望不久的未來,JPA能成爲真正的標準。