C03.JPA(Java Persistence API)

Java EE 5 平台引入了 Java持久化 API(Java Persistence API,JPA),它為 Java EE 和 Java SE應用程序提供了一個基於 POJO的持久化模組。JPA 處理關係資料與Java物件之間的映射,它使物件/關係(O/R)映射標準化,JPA 已經被廣泛採用,已經成為事實上的O/R持久化企業標準。

Java EE 6 帶來了JPA的最新版本 — JSR 317:Java持久化2.0,JPA 2.0帶來了許多新特性和增強,包括:
  1. 物件/關係映射增強;
  2. Java持久化查詢語言增強;
  3. 一種新的基於標準的查詢API;
  4. 支持悲觀鎖定。


Java Persistence API (JPA) 2.0,這一版對規範作出了重要更新,為條件查詢(criteria queries)增加了一個API,一個元模型API,並且支持 Bean Validation [JSR 303]。


JPA 2.0 引入的關鍵特性之一就是 Criteria API,它為 Java 語言帶來了一種獨特的能力:開發一種 Java 編譯器可以在運行時驗證其正確性的查詢。Criteria API 還提供一個能夠在運行時動態地構建查詢的機制。


Java.EE.EJB.JPA.2.0.JPA101.Introduction





到 Java EE 6 的時候, JPA 已經徹底從 EJB 中分離,形成自己的體系 (EJB3.0 已經將 JPA 分離出去了 ) . JPA 的成功是毫無疑問的。它廣泛得到社區的採納和一流供應商的支持。本來我們擔心 EJB2.* 的 Enity Beans 垮台可能無法讓 Java EE 再次引領持久層的標準,一個重要成功的因素就是 Gaving King 和 JBoss 社區毫不含糊的支持。 JPA2.0 的目標就是要在這次成功的基礎上再接再厲,填補更多的空白,再創多的創新:

JPA2.0 加入了大量必須的 ORM 映射增強特性,包括:支持通過使用 @ElementCollection 標註來增強 collections, maps 和 lists( 這裡不是指實體之間的關聯關係 ) 集合,支持 map 的單向 one-to-many 關聯 (JPA1.0 只允許雙向 one-to-many 關聯 ) .

EntityManager 和 Query API 都得到改進。比如說,現在可以從結果集中直接取得第一條記錄 (JPA1.0 只允許從一個 unique 結果集中反回單個記錄 ) ,指定 query 結果集的最大值,訪問各個供應商的底層實體對象 manager 或 query ,最後就是加入悲觀鎖 (JPA1.0 只支持樂觀鎖 ) .

JPQL 也提供類似於 SQL 的 CASE , NULLIF , COALESCE 等函數 .

JPA2.0 應廣大開發者要求增加了 Criteria API .要是你對 Hibernate 或 TopLink 的 Criteria API 不熟悉的話,可以將它想像成一個以 Java 為中心的面向對象,線程安全並可以與 JPQL 劃上等號的一組 API .這組 API 適合於編寫複雜的動態查詢語句,還可避免解析 JPQL 語句時,所拋出的運行期異常。




Java EE 6引入的JPA 2.0四大新特性詳解(1)