日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

如何使用JPA注解标注多对多的关系

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用JPA注解标注多对多的关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設應用場景如下:Teacher與Student是多對多的關系,其中,Teacher類對應teacher表如下:

CREATE TABLE `teacher` (
? `id` bigint(20) NOT NULL AUTO_INCREMENT,
? `name` varchar(50) DEFAULT NULL,
? PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

Student類對應student表如下:

CREATE TABLE `student` (
? `id` bigint(20) NOT NULL AUTO_INCREMENT,
? `name` varchar(50) DEFAULT NULL,?
? PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

中間表teacher_student表如下:

CREATE TABLE `teacher_student` (
? `id` bigint(20) NOT NULL AUTO_INCREMENT,
? `teacher_id` bigint(20) NOT NULL ,
? `student_id` bigint(20) NOT NULL ,
? PRIMARY KEY (`id`),
? KEY `fk_reference_50` (`teacher_id`),
? CONSTRAINT `fk_reference_50` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`),
? KEY `fk_reference_60` (`teacher_id`),
? CONSTRAINT `fk_reference_60` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

Student類如下:

public class Student{
?? ? //對應的教師集合
?? ?private Set<Teacher> teachers = new HashSet<Teacher>();

?? ?/*? ?
?? ? * @ManyToMany 注釋表示Student是多對多關系的一邊,mappedBy 屬性定義了Student 為雙向關系的維護端? ?
?? ? */? ?
?? ?@ManyToMany(mappedBy = "students")? ?
?? ?public Set<Teacher> getTeachers() {? ?
?? ? ? ?return teachers;? ?
?? ?}? ?
??
?? ?public void setTeachers(Set<Teacher> teachers) {? ?
?? ? ? ?this.teachers = teachers;? ?
?? ?}? ?
}

說明

1、該類經過簡化,沒有列出全部代碼,在此我們只關注ManyToMany注解及其屬性設置。

其他屬性說明參加上篇文章:如何使用JPA注解標注一對一的關系

public class Teacher implements Serializable {? ?
?? // 對應的學生集合
?? ?private Set<Student> students = new HashSet<Student>();
??
?? ?/*? ?
?? ? * @ManyToMany 注釋表示Teacher 是多對多關系的一端。? ?
?? ? * @JoinTable 描述了多對多關系的數據表關系,name屬性指定中間表名稱。? ?
?? ? * joinColumns 定義中間表與Teacher 表的外鍵關系,中間表teacher_student的teacher_id 列是 teacher 表的主鍵列對應的外鍵列。? ?
?? ? * inverseJoinColumns 屬性定義了中間表與另外一端(Student)的外鍵關系。? ?
?? ? */? ?
?? ?@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)? ?
?? ?@JoinTable(name = "teacher_student",
?? ? ? ? ? ?joinColumns ={@JoinColumn(name = "teacher_id", referencedColumnName = "id") },? ? ?
?? ? ? ? ? ?inverseJoinColumns = { @JoinColumn(name = "student_id", referencedColumnName = "id")? ? ?
?? ?})? ?
?? ?public Set<Student> getStudents() {? ?
?? ? ? ?return students;? ?
?? ?}? ?
??
?? ?public void setStudents(Set<Student> students) {? ?
?? ? ? ?this.students = students;? ?
?? ?}? ?
}

說明:

1、@JoinTable
@JoinTable注解定義了聯接表的表名,連接列數組,以及invers連接列數組。invers連接列數組是關聯表中關聯到student表主鍵的列(the “other side”)。

被關聯端(Student)不必也不能描述物理映射:只需要一個簡單的mappedBy參數,該參數包含了主體端(Teacher)的屬性名,這樣就綁定了雙方的關系。

默認值:

和其它許多注解一樣,在多對多關聯中很多值是自動生成,當雙向多對多關聯中沒有定義任何物理映射時,Hibernate根據以下規則生成相應的值:

關聯表名:主表表名+下劃線+從表表名;
關聯到主表的外鍵名:主表名+下劃線+主表中的主鍵列名;
關聯到從表的外鍵名:主表中用于關聯的屬性名+下劃線+從表的主鍵列名。

以上規則對于雙向一對多關聯同樣一樣。

轉載于:https://www.cnblogs.com/shihao/archive/2012/06/21/2558333.html

總結

以上是生活随笔為你收集整理的如何使用JPA注解标注多对多的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。