商業邏輯背後,多數應用依賴高效能關係型資料庫支撐資料模型層。
直接操作 SQL,手動在物件模型與 JDBC 結果集轉換。適合內部模型接近二維表的簡單應用。
提供物件導向 API 存儲/查詢/檢索,框架自動完成物件↔關係表轉換。定義專屬查詢語言(如 HQL),自動生成特定資料庫 SQL。適合複雜資料模型,節省時間、降低錯誤。
物件資料庫直接存儲物件,無需 ORM,但成熟度、效能遜於關係型資料庫。優秀 ORM 框架本質上為關係型資料庫提供物件資料庫介面。
@Entity
// @Table(name="AlternativeTableName")
public class Person implements Serializable {
protected int id;
protected String name;
protected Date dateOfBirth;
public void setId(int id) { this.id = id; }
@Id(generate = GeneratorType.AUTO)
public int getId() { return id; }
public void setName(String name) { this.name = name; }
// @Column(name="AlternativeColumnName")
public String getName() { return name; }
public void setDateOfBirth(Date dob) { this.dateOfBirth = dob; }
public Date getDateOfBirth() { return dateOfBirth; }
}
@Entity:標記為持久化實體@Table 可覆寫@Column 可覆寫@Id + GeneratorType.AUTO:主鍵自動生成@Entity
public class Person implements Serializable {
// ...
protected Resume resume; // 一對一
protected CreditCard[] cards; // 一對多
protected Address addr; // 多對一
@OneToOne
public Resume getResume() { return resume; }
@ManyToOne
// @JoinColumn(name="MyCustomId")
public Address getAddr() { return addr; }
@OneToMany
public Collection getCards() { return cards; }
}
@OneToOne。@ManyToOne Person 屬性。外鍵欄位名由容器自動決定,或透過 @JoinColumn 顯式指定。
面向物件設計核心概念,EJB 3.0 提供多種繼承映射策略(單表、聯表、具體表各自為表),平衡儲存效率與查詢複雜度。
EJB 3.0 實體 Bean 以POJO + 註解徹底簡化 ORM:無介面/抽象類負擔、映射資訊與程式碼共存、關係定義直觀宣告、持久化上下文封裝部署單元。建立在 Hibernate/TopLink 成功經驗上,提供標準化的企業級 POJO ORM 解決方案。