EnterPRise javaBeans查詢語言(EJB QL)定義了容器治理持續化的finder方法和select方法的查詢。作為SQL92的一個子集,EJB QL進行了擴展,它可以使用entity bean的抽象模式中定義的關聯。一個EJB QL查詢可以跨越封裝在同一個EJB JAR文件中的所有相關的entity bean的抽象模式。
你可以在entity bean中部署描述中定義EJB QL查詢。典型的情況是,一個工具會將這些查詢轉換成低層數據存儲所使用的查詢語言。因為這種轉換的存在,使用容器治理持續化的entity bean具有可移植性--它們的代碼不受具體的數據存儲的類型的影響。
術語
下面列出了本章中用到的一些術語的定義。
1、Abstract schema--抽象模式:一個entity bean的部署描述的一部分,它定義了bean的持續化字段和關聯關系。
2、Abstract schema name--抽象模式名:在EJB QL查詢中引用的一個邏輯命名。你需要為每個容器治理持續化的entity bean指定一個抽象模式名。
3、Abstract schema type--抽象模式類型:所有的EJB QL表達式都對應一個類型。假如表達式是一個抽象模式名,那么它的類型默認是定義了這個抽象模式名的entity bean的local接口。
4、Backus-Naur Form (BNF)--巴科斯-諾爾范式:一種描述高級語言語法的一種表示法。這一章的語法圖表使用了BNF表示法。
5、navigation--跨越:在一個EJB QL表達式中對關聯關系的使用。跨越操作符是一個句點。
6、path eXPression--路徑表達式:一個跨越到相關entity bean的表達式。
7、persistent field--持續化字段:一個容器治理持續化的entity bean中的一個虛擬字段;它存儲在一個數據庫中。
8、relationship field--關聯字段:一個容器治理持續化的entity bean中的一個虛擬字段;它確定了一個相關的entity bean。
簡單的語法
這里簡要地描述了EJB QL的語法,這樣你可以快速進入下面查詢示例的學習。假如你要對此進行更深入的學習,請閱讀完整的語法。
一個EJB QL查詢由三個子句組成:SELECT子句、FROM子句和WHERE子句,SELECT子句和FROM子句是必選的,而WHERE子句是可選的。下面是一個EJB QL查詢的簡單BNF定義:
EJB QL :: = select_clause from_clause [where_clause]
ELECT子句定義了對象的類型或查詢的返回值。返回類型可是一個local接口、一個remote接口或是一個持續化字段。
FROM子句通過聲明一個或多個標識變量定義了查詢的范圍,這些標識變量可能會在SELECT子句和WHERE子句中被引用。一個標識變量反映了下列元素之一:
1、一個entity bean的抽象模式名
2、一個集合的一個成員,這個集合是一個一對多關系中的多端
WHERE子句是一個限制查詢找到的對象或數值的條件表達式。盡管它是可選的,但是絕大多數查詢都會有一個WHERE子句。
查詢示例
下面的查詢來自于RosterApp J2EE應用程序的PlayerEJB entity bean,在第六章中我們對這個應用程序作了介紹。RosterApp中bean之間的關聯關系,請參看圖6-1。
簡單的Finder查詢
假如你對EJB QL不熟悉,這些簡單的查詢將有助于你盡快入門。
示例 1
SELECT OBJECT(p)
FROM Player p
獲得的數據:所有隊員。
Finder方法: findall()
說明:FROM子句聲明了一個名為p的標識變量,其中省略了可選的AS要害字。假如使用了AS要害字,這個子句將是這樣的:
FROM Player AS p
Player元素是PlayerEJB entity bean的抽象模式名。因為bean在LocalPlayerHome接口中定義了findall方法,所以這個查詢返回的對象具有LocalPlayer類型。
參見: 標識變量
示例 2
SELECT DISTINCT OBJECT(p)
FROM Player p
WHERE p.position = ?1
獲得的數據:由finder方法的參數指定位置的隊員。
Finder方法: findByPosition(String position)
說明:在一個SELECT子句中,在例如p這樣的獨立的標識變量前面要加OBJECT要害字。DISTINCT要害字排除了重復的數據。
WHERE子句通過檢查隊員的position這個PlayerEJB entity bean的持續化字段對獲得的隊員進行了限制。?1元素表示了了findByPosition方法中的輸入參數。
參見: 輸入參數, DISTINCT要害字和OBJECT要害字
示例 3
新聞熱點
疑難解答