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

EJB 3.0 關聯映射完全指南:多對多與一對一關係實作

     編輯:Java 相關知識

多對多關係:學生 ↔ 老師

需中間關聯表 STUDENT_TEACHER,雙向導航。


// Student 端
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
@JoinTable(
    name = "STUDENT_TEACHER",
    joinColumns = @JoinColumn(name = "STUDENT_ID"),
    inverseJoinColumns = @JoinColumn(name = "TEACHER_ID")
)
public Set<Teacher> getTeachers() { return teachers; }

// Teacher 端
@ManyToMany(mappedBy = "teachers")
public Set<Student> getStudents() { return students; }

一對一關係:學生 ↔ 档案

單向或雙向,外鍵置於任一端。


// Student 端(擁有外鍵)
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "DOSSIER_ID")
public Dossier getDossier() { return dossier; }

// Dossier 端(雙向時)
@OneToOne(mappedBy = "dossier")
public Student getStudent() { return student; }

關鍵註解對照

關係擁有端註解被擁有端註解資料表結構
多對多@ManyToMany + @JoinTable@ManyToMany(mappedBy=...)中間表
一對一@OneToOne + @JoinColumn@OneToOne(mappedBy=...)外鍵在擁有端

完整範例結構

  • 實體:Student、Teacher、Dossier
  • Session Bean:EntityTestBean 建立測試資料
  • Client:查詢驗證雙向導航

常見坑點

  • 忘記 mappedBy 導致產生兩張中間表或重複外鍵。
  • 雙向關係僅單邊維護集合,另一邊不同步造成資料不一致。
  • cascade = ALL 可能誤刪關聯另一端資料,需謹慎評估。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved