国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

全面研讀EJB 2.0(3)

2019-11-18 13:47:38
字體:
來源:轉載
供稿:網友

  全面研讀EJB 2.0(3)

· EJB 查詢語言

EJB 查詢語言 (EJB QL) 規定了持久性治理器應該如何實現在本地接口中定義的各種查找方法。 EJB QL 以 SQL-92 為基礎,可由持久性治理器自動編譯,這使得實體 bean 具有更高的可移植性,并且更輕易部署。

· EJB QL 和查找方法

EJB QL 語句是在實體 bean 的部署描述符中聲明的。使用 EJB QL 非常簡單。作為一個例子,Employee bean 的本地接口可以按以下方式聲明:

public interface EmployeeHome extends javax.ejb.EJBHome
{
...
public Employee findByPRimaryKey(Integer id)
throws RemoteException, CreateException;
public Collection findByZipCode(String zipcode)
throws RemoteException, CreateException;
public Collection findByInvestment(String
investmentName)
throws RemoteException, CreateException;
}

給定了上面的本地接口定義之后,您就可以使用 EJB QL 來指定持久性治理器應該如何執行查找方法。每個實體 bean 都必須有一個 findByPrimaryKey() 方法。為執行該方法所需的查詢是很明顯的 -- 使用主要害字的(一個或幾個)字段在數據庫中查找 bean,這樣就不需要任何 EJB QL 語句。

findByZipCode() 方法用來獲得具有某個郵政編碼的所有 Employee bean。這將使用部署描述符中的下列 EJB QL 來表達。

FROM contactInfo WHERE contactInfo.zip = ?1

該語句本質上是表示“選擇其郵政編碼等于 zipcode 參數的所有 Employee bean”。

在用于查找方法的 EJB QL 語句中,不需要使用 SELECT 子句來表明要選擇的內容。這是因為,查找方法將總是選擇與其自身的 bean 類型相同的遠程引用。在這種情況下,就可以認為選擇語句將返回遠程 Employee bean 的全部引用。

假如各種查找方法都一起部署在同一個 ejb-jar 文件中,并且其間具有可導航的實際關系,那么這些查找方法就甚至可以跨越到另一些 bean 的抽象持久性方案中去。例如,findByInvestment() 方法將要求該查找查詢從 Employee 導航到投資 bean 的抽象持久性方案中去。聲明來表達這種查找操作的 EJB QL 語句如下所示。

FROM element IN benefit.investments WHERE element.name
= ?1


以上語句是說:“選擇全部這樣的 Employee bean:其獲利從屬對象至少包含一個投資 bean 的引用,并且其名稱等于 findByInvestment() 方法的 investmentName 參數。”

· EJB QL 和選擇方法

EJB QL 也用于一種稱為 ejbSelect 方法的新查詢方法中,該方法類似于查找方法,只是它僅供 bean 類使用。該方法不在本地接口中聲明,所以也不顯露給客戶機。此外,ejbSelect 方法可返回范圍更大的各種值,而不僅限于 bean 本身的遠程接口類型。

存在兩種選擇方法:ejbSelect<METHOD> 和 ejbSelect<METHOD>InEntity。ejbSelect<METHOD> 方法是全局執行的,這是指這種方法并非專用于執行該方法的 bean 實例。ejbSelect<METHOD>InEntity 方法則專用于執行該方法的實體實例。這些選擇方法在 bean 類中被聲明為抽象方法,并在這些類的業務方法中使用。下面是 ejbSelect<METHOD> 方法和 ejbSelect<METHOD>InEntity 方法的示例,同時說明了可以如何在業務方法中使用它們。

public abstract class EmployeeBean implements
javax.ejb.EntityBean {
...
// ejbSelectInEntity
public abstract Collection
ejbSelectInvestmentsInEntity (String risk);
// ejbSelect
public abstract Collection
ejbSelectInvestments(String risk);
...
}

在上面的聲明中,兩種選擇方法運行于不同的范圍。ejbSelectInvestmentsInEntity() 僅在當前的 Employee bean 實例上執行,所以它只返回雇員的風險投資。

SELECT invest FROM invest IN benefit.investments WHERE
invest.type = ?1

另一方面,ejbSelect<METHOD> 方法的范圍則是全局性的,所以同一個查詢將返回整個企業內所有雇員的全部風險投資。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台南县| 蕉岭县| 绵阳市| 昭平县| 祁东县| 彩票| 宕昌县| 青冈县| 米泉市| 阳春市| 宜川县| 固始县| 思茅市| 金昌市| 安庆市| 龙里县| 南充市| 金平| 海丰县| 大洼县| 张北县| 贞丰县| 临沭县| 杂多县| 岳阳县| 澳门| 玉溪市| 玛多县| 张家口市| 陇西县| 定陶县| 甘孜| 文安县| 海林市| 漳平市| 翼城县| 蓬溪县| 嵩明县| 清水县| 灵川县| 开远市|