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

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

編輯:J2EE

Java持久化查詢語言增強

JPA 1.0定義了一個廣泛的Java持久化查詢語言(非正式簡稱為JPQL。有關JPQL查詢的缺陷,可參考51CTO之前發布的這篇文章),使用它你可以查詢實體和它們的持久化狀態。JPA 2.0對JPQL做了大量改進,如現在可以在查詢中使用case表達式。在下面的查詢中,如果雇員的評分為1,則通過乘以1.1對雇員的薪水進行了增長,如果評分為2,則乘以1.05,其它評分則乘以1.01。

  1. UPDATE Employee e
  2. SET e.salary =
  3. CASE WHEN e.rating = 1 THEN e.salary * 1.1
  4. WHEN e.rating = 2 THEN e.salary * 1.05
  5. ELSE e.salary * 1.01
  6. END

JPA 2.0也為JPQL增加了大量新的運算符,如NULLIF和COALESCE,當數據庫使用其它非空數據解碼時,NULLIF運算符是非常有用的,使用NULLIF,你可以在查詢中將這些值轉換為空值,如果參數等於NULLIF,NULLIF會返回空值,否則返回第一個參數的值。

假設薪水數據保存在employee表中,數據類型為整數,卻掉的薪水解碼為-9999,下面的查詢返回薪水的平均值,為了正確地忽略卻掉的薪水,查詢使用NULLIF將-9999轉換為空值。

  1. SELECT AVG(NULLIF(e.salary, -99999))
  2. FROM Employee e

COALESCE運算符接收一串參數,從列表中返回第一個非空值,相當於下面的case表達式:

  1. CASE WHEN value1 IS NOT NULL THEN value1
  2. WHEN value2 IS NOT NULL THEN value2
  3. WHEN value3 IS NOT NULL THEN value3
  4. ...
  5. ELSE NULL
  6. END

假設employee表包括一個辦公電話號碼和家庭電話號碼列,無電話號碼的列使用空值表示。下面的查詢返回每個雇員的姓名和電話號碼,COALESCE運算符指定查詢返回辦公電話號碼,但如果為空,則返回家庭電話號碼,如果兩者都為空,則返回一個空值。

  1. SELECT Name, COALESCE(e.work_phone, e.home_phone) phone
  2. FROM Employee e

  • 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更好用
JPA 2.0向JPQL增加的其它運算符是INDEX,TYPE,KEY,VALUE和ENTRY。INDEX運算符指定查詢時的排序順序,TYPE運算符選擇一個實體的類型,將查詢限制到一或多個實體類型,KEY,VALUE和ENTRY運算符是JPA 2.0中的泛化映射功能的一部分。使用KEY運算符提取映射鍵,VALUE運算符提取映射值,ENTRY運算符選擇一個映射實體。

此外,JPA 2.0增加了選擇列表、以及集合值參數和非多態查詢中運算符的支持。

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