EJB 3.0 採用註解驅動,實體 Bean 如同普通 JavaBean (POJO) 般開發,無需 Home/Remote/Local 介面。JBoss EJB 3.0 建構於 Hibernate 之上,提供標準化持久化 API。
| 註解 | 用途 | 關鍵屬性 |
|---|---|---|
@Entity | 標記實體 Bean 類 | name (預設類名)、entityType (CMP/BMP)、access (PROPERTY/FIELD)、version |
@Table | 指定對應資料表 | name、uniqueConstraints |
@Id | 定義主鍵 | generate: TABLE/SEQUENCE/IDENTITY/AUTO/NONE |
@OneToMany | 一對多關聯 (雙向必須) | targetEntity、cascade (MERGE/CREATE/REMOVE/ALL)、fetch (LAZY/EAGER) |
@ManyToOne | 多對一關聯 (對應 OneToMany) | 通常搭配 @JoinColumn |
@JoinColumn | 指定外鍵欄位 | name (外鍵欄名)、referencedColumnName (參考主鍵欄名) |
Serializable 介面 (供遠端傳遞)。PROPERTY (Getter/Setter) 或 FIELD (直接欄位存取,需 protected 以上)。@Entity
@Table(name = "STUDENT")
public class Student implements Serializable {
private int id;
private String name;
private Collection scores;
@Id(generate = GeneratorType.AUTO)
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public void addScore(String name, int number) {
if (scores == null) scores = new ArrayList();
Score score = new Score();
score.setName(name);
score.setNumber(number);
score.setStudent(this); // 維護雙向關聯
scores.add(score);
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "student_id")
public Collection getScores() { return scores; }
public void setScores(Collection scores) { this.scores = scores; }
}
@Entity
@Table(name = "SCORE")
public class Score implements Serializable {
private int id;
private String name;
private int number;
private Student student;
@Id(generate = GeneratorType.AUTO)
public int getId() { return id; }
public void setId(int id) { this.id = id; }
// ... name, number getter/setter ...
@ManyToOne
@JoinColumn(name = "student_id")
public Student getStudent() { return student; }
public void setStudent(Student student) { this.student = student; }
}
Student.addScore() 中必須設定 score.setStudent(this),確保關聯一致性。LAZY。@JoinColumn(name="student_id") 在 SCORE 表建立外鍵指向 STUDENT.id。Teacher (Remote 介面) / TeacherBean (Stateless Session Bean) 封裝業務邏輯調用實體。Client 透過 JNDI 查找 Teacher Bean 執行測試。build.xml (Ant) 整合編譯、部署、測試、清理。