public interface EmployeeHome extends javax.ejb.EJBHome {
public Employee findByPrimaryKey(Integer id) ... // 主鍵查詢無需 EJB QL
public Collection findByZipCode(String zipcode) ...
public Collection findByInvestment(String investmentName) ...
}
<query>
<query-method>
<method-name>findByZipCode</method-name>
<method-params><method-param>java.lang.String</method-param></method-params>
</query-method>
<ejb-ql>FROM contactInfo WHERE contactInfo.zip = ?1</ejb-ql>
</query>
<query>
<query-method>
<method-name>findByInvestment</method-name>
<method-params><method-param>java.lang.String</method-param></method-params>
</query-method>
<ejb-ql>FROM element IN benefit.investments WHERE element.name = ?1</ejb-ql>
</query>
public abstract class EmployeeBean implements javax.ejb.EntityBean {
// InEntity 範圍
public abstract Collection ejbSelectInvestmentsInEntity(String risk);
// 全域範圍
public abstract Collection ejbSelectInvestments(String risk);
}
<!-- InEntity -->
<ejb-ql>SELECT invest FROM invest IN benefit.investments WHERE invest.type = ?1</ejb-ql>
<!-- 全域 -->
<ejb-ql>SELECT invest FROM invest IN benefit.investments WHERE invest.type = ?1</ejb-ql>
<!-- 全域 select 不得回傳 Dependent 型別 -->
| 特性 | ejbSelect<M>InEntity | ejbSelect<M> (全域) |
|---|---|---|
| 執行範圍 | 當前 Entity 實例 | 全域 (所有實例) |
| 可回傳 Dependent | 是 | 否 |
| 需 SELECT 子句 | 是 | 是 |
// Local Home
public interface EmployeeHome extends javax.ejb.EJBHome {
public void applyCola(double increase) throws RemoteException;
}
// Bean 實作
public abstract class EmployeeBean implements javax.ejb.EntityBean {
public void ejbHomeApplyCola(double increase) {
Collection col = ejbSelectAllEmployees();
Iterator it = col.iterator();
while (it.hasNext()) {
Employee emp = (Employee) it.next();
double salary = emp.getAnnualSalary();
emp.setAnnualSalary(salary + salary * increase);
}
}
}
EJB QL 標準化查詢定義,消除廠商專屬查詢語言差異;`ejbSelect` 提供 Bean 內部靈活查詢能力;`ejbHome` 賦予類別層級操作入口。三者結合大幅增強 CMP 2.0 的表達力與可攜性。