首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EJB 3.0 實體 Bean 開發指南:註解驅動、關聯映射與 JBoss/Hibernate 整合

     編輯:Java 相關知識

EJB 3.0 實體 Bean 核心簡化

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 (參考主鍵欄名)

實體 Bean 開發規範

  • 實作 Serializable 介面 (供遠端傳遞)。
  • 提供無參數建構子 (容器實例化需求)。
  • 可持久化屬性型別:基本型別、String、BigInteger/Decimal、Date/Calendar/SQL Date/Time/Timestamp、byte[]/char[]、其他實體類型、Collection/Set (不支援 List)。
  • 存取模式:PROPERTY (Getter/Setter) 或 FIELD (直接欄位存取,需 protected 以上)。

完整範例:學生-成績雙向一對多關聯

Student 實體 (一端)

@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; }
}

Score 實體 (多端)

@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; }
}

關鍵設計要點

  1. 雙向關聯維護:Student.addScore() 中必須設定 score.setStudent(this),確保關聯一致性。
  2. CascadeType.ALL:學生建立/合併/移除時,成績同步操作。
  3. FetchType.EAGER:載入學生時立即載入成績集合 (適合小量關聯);大量關聯建議 LAZY。
  4. 外鍵策略:@JoinColumn(name="student_id") 在 SCORE 表建立外鍵指向 STUDENT.id。

測試架構

  • Teacher (Remote 介面) / TeacherBean (Stateless Session Bean) 封裝業務邏輯調用實體。
  • Client 透過 JNDI 查找 Teacher Bean 執行測試。
  • 建置腳本 build.xml (Ant) 整合編譯、部署、測試、清理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved