由 JBuilder 等工具產生的預設 Entity Bean,每個欄位對應一對 getter/setter,全部宣告為 public CMP 欄位。
public class CompanyBean implements EntityBean {
EntityContext entityContext;
public Integer comId; // PK
public String comName;
public String comDescription;
public Timestamp mutationDate;
public Integer ejbCreate() throws CreateException { return null; }
// 針對每個欄位的 getter/setter 皆暴露於 Remote Interface
public Integer getComId() { return comId; }
public void setComId(Integer comId) { this.comId = comId; }
public String getComName() { return comName; }
public void setComName(String comName) { this.comName = comName; }
// ... 其他欄位同理
}
public class EmployeeBean implements EntityBean {
EntityContext entityContext;
public Integer empId; // PK
public Integer comId; // FK
public String empFirstName;
public String empLastName;
public Timestamp mutationDate;
public Integer ejbCreate() throws CreateException { return null; }
// 大量 getter/setter ...
}
comId 僅為整數,無法導航至 Company 物件。
模式一 (基礎 CMP)
↓ 引入 Value Object 封裝傳輸
模式二 (DTO 模式)
↓ Entity Bean 繼承 Struct 消除重複
模式三 (繼承模式)
↓ Struct 新增 copyFrom() 一鍵複製
模式四 (複製優化)
↓ 處理 Bean 間關聯 (FK → 物件導航)
模式五 (關聯模式)
模式一雖然缺點眾多,但它是理解 EJB 2.x CMP 演進的起點。每一個後續模式都針對前一模式的特定痛點優化,最終形成相對完整的實體 Bean 設計體系。現代開發中,這些問題由 JPA/Hibernate 自動解決(Entity 即 DTO、關聯導航、交易管理),開發者應理解歷史脈絡以避免重蹈覆轍。