跳轉到內容

Jakarta EE 程式設計/EJB-QL

25% developed
來自華夏公益教科書

EJB 查詢語言用於定義實體 Bean 的查詢方法應該返回什麼。EJB 1.1 規範沒有提供查詢實體 Bean 的方法。導致不同的應用程式伺服器使用不同的查詢語言。當 Sun 釋出 EJB 2.0 規範時,它添加了一種查詢語言,以便更輕鬆地查詢實體 Bean。

基本語法

[編輯 | 編輯原始碼]
SELECT_CLAUSE FROM_CLAUSE [WHERE_CLAUSE]

必須使用 SELECT_CLAUSE 和 FROM_CLAUSE,但 WHERE_CLAUSE 是可選的。

查詢方法

[編輯 | 編輯原始碼]

查詢方法用於從儲存中返回一個或多個實體。查詢方法在實體的主介面中定義。查詢方法的返回值是 Bean 的遠端介面或實現遠端介面的實體 Bean 集合,這些實體 Bean 被找到。

基本查詢方法

[編輯 | 編輯原始碼]

最簡單的 EJB 查詢是返回給定表中的所有實體的查詢。

@ejb.finder
  signature="Collection findAll()"
  query="SELECT DISTINCT OBJECT(p) FROM Player p"

如您所見,EJB 查詢看起來幾乎與標準 SQL 查詢相同,儘管它不是表名,而是 EJB 類名,也不是列名,而是 EJB 屬性名。唯一的區別是終端 object(o),它等同於:獲取給定行的所有列,並將結果轉換為實體 Bean 例項。

帶有 WHERE 子句的查詢方法

[編輯 | 編輯原始碼]

檢視上面的示例。它與上面的查詢方法的不同之處在於,它添加了對要返回的球員的條件。

@ejb.finder
  signature="Collection findByPosition(java.lang.String position)"
  query="SELECT DISTINCT OBJECT(p) FROM Player p WHERE p.position = ?1"

此查詢方法返回所有在引數一中輸入的位置上比賽的球員。如果您有多個引數,您可以在查詢中使用它們,例如 ?2、?3 等。

對關係進行操作的查詢方法

[編輯 | 編輯原始碼]

當您想使用不同的關係表時,EJB 查詢與 SQL 的區別尤其明顯。

@ejb.finder
   signature="Collection findByCity(java.lang.String city)"
   query="SELECT DISTINCT OBJECT(p) FROM Player p, IN (p.teams) AS t WHERE t.city = ?1"

此查詢返回所有球隊在引數一中給定的城市比賽的球員。換句話說:返回所有在位於給定城市的球隊中比賽的球員。

選擇方法

[編輯 | 編輯原始碼]

與查詢方法相反,選擇方法可能會返回持久欄位或其他實體 Bean。因此,可以定義一個返回基本資料型別而不是完整物件的 select 方法。

Clipboard

待辦事項
新增示例。



華夏公益教科書