(轉)ManyToMany注解


@ManyToMany 
注釋:表示此類是多對多關系的一邊,mappedBy 屬性定義了此類為雙向關系的維護端,注意:mappedBy 屬性的值為此關系的另一端的屬性名。
例如,在Student類中有如下方法:
被控方:
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "students")
public Set<Teacher> getTeachers() {
return teachers;
}

 

那么這里的“students”就是Teachers的一個屬性,通常應該是這樣的:
Set<Student> students;

 

另一端的getStudents方法如下所示:
  主控方:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
  joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},
  inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName ="studentid")})
public Set<Student> getStudents() {
return students;
}

 

@ManyToMany 注釋表示Teacher 是多對多關系的一端。
@ JoinTable 描述了多對多關系的數據表關系。
name 屬性指定 中間表名稱,
joinColumns 定義 中間表與Teacher 表的外鍵關系。
上面的代碼中, 中間表Teacher_Student的Teacher_ID 列是Teacher 表的主鍵列對應的外鍵列,
inverseJoinColumns 屬性定義了 中間表與另外一端(Student)的外鍵關系。
 
可以通過上面的定義看到有三個表學生表--老師表--老師學生中間表
以上提到主控方和被控方。。本人不贊同這種寫法:
理由是:
1.既然是多對多關系。。為什么還要分主動方和被動方?
              
2.為什么需要刪除老師后才級聯中間表。。。請注意:以上定義方法時,刪除學生是無法級聯刪除中間表的。
正確的寫法應該是兩邊都用主控方的寫法:
只是joinColumns和inverseJoinColumns屬性的地方互換就可以了
new:(個人觀點,,歡迎大家一起來討論此問題)
總結:
個人的定義:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
  joinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName = "studentid")},
  inverseJoinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName ="teacherid")})
public Set<Teacher> getTeachers() {
  return teachers;
}

 

 
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
  joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},
  inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName ="studentid")})
public Set<Student> getStudents() {
  return students;
}

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM