程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Java EE 6引入的JPA 2.0四大新特性詳解(1)

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

編輯:J2EE

【51CTO精選譯文】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、支持悲觀鎖定。

對象/關系映射增強

JPA 1.0支持集合的映射,但這些集合只能包含實體,JPA 2.0增加了集合映射的基礎數據類型,如String和Integer,以及嵌入式對象的集合。JPA中的嵌入式對象是一個不能存在於它自身的對象,而是作為父對象的一部分存在,即它的數據不是存在於它自己的表中,而是嵌入在父對象的表中。

JPA 2.0增加了兩個支持新的集合映射的注解:@ElementCollection 和 @CollectionTable。使用@ElementCollection注解指定集合的嵌入式對象,這些集合是獨立存儲在集合表中的,使用@CollectionTable注解指定集合表的詳細信息,如它包含的列。

下面是一個嵌入式類,表示了車輛的訪問服務,它存儲了訪問的日期,描述和費用,此外,車輛可以配備一或多個可選功能,每個功能是FeatureType類型的一個枚舉值。

  1. public enum FeatureType { AC, CRUISE, PWR, BLUETOOTH, TV, ... }
  2. @Embeddable
  3. public class ServiceVisit {
  4. @Temporal(DATE)
  5. @Column(name="SVC_DATE")
  6. Date serviceDate;
  7. String workDesc;
  8. int cost;
  9. }

枚舉值和嵌入式對象可以在一個表示車輛服務歷史的實體中使用,如:

  1. @Entity
  2. public class Vehicle {
  3. @Id int vin;
  4. @ElementCollection
  5. @CollectionTable(name="VEH_OPTNS")
  6. . @Column(name="FEAT")
  7. Set<FeatureType> optionalFeatures;
  8. @ElementCollection
  9. @CollectionTable(name="VEH_SVC")
  10. @OrderBy("serviceDate")
  11. List<ServiceVisit> serviceHistory;
  12. ...
  13. }

  • Java EE 6數據驗證新框架:Bean驗證
  • Java EE 6增強的可擴展性:Web分片和可插
  • Java EE 6新特性之Servlet 3.0的異步處理
  • 在Java EE 6中使用JSF 2.0簡化頁面制作
  • EJB 3.1五大模式改進令Java EE 6更好用
Vehicle實體中的第一對注解@ElementCollection 和 @CollectionTable指定FeatureType值存儲在VEH_OPTNS集合表中,第二對注解@ElementCollection 和 @CollectionTable指定ServiceVisit嵌入式對象存儲在VEH_SVC集合表中。

雖然在例子中沒有顯示,@ElementCollection注解有兩個屬性:targetClass 和 fetch。targetClass屬性指定基礎類或嵌入式類的類名,如果字段或屬性是使用泛型定義的,那這兩個屬性是可選的,上面這個例子就是這樣。Fetch屬性是可選的,它指定集合是延後檢索還是立即檢索,使用Javax.persistence.FetchType常量,值分別用LAZY和EAGER,默認情況下,集合是延後匹配的。

JPA 2.0中還有其它許多關於對象/關系映射的增強,例如,JPA 2.0支持嵌套式嵌入,關系嵌入和有序列表,也增加了新的注解增強映射功能,通過@Access注解更靈活地支持特定的訪問類型,更多用於實體關系的映射選項,如對單向一對多關系的外鍵映射支持,通過@MapsId注解支持派生身份,支持孤體刪除。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved