实现many-to-many映射关系的步骤一般如下:
-
创建数据库表格:many-to-many映射的本质是两个一对多关系,因此需要创建三张表:一个主要表,和两个从表。
-
定义实体类(Entity Class): 创建实体类,包含对应的类成员变量,其中需要注意的是,在类中要使用集合表示与其他实体类的关系。
-
建立映射关系:在实体类之间确定映射关系,通过注解实现 OneToMany 和 ManyToOne 的关系。
-
建立 many-to-many 的关系: 在实体类之间确定 many-to-many 的关系,通过注解 @ManyToMany 实现。
下面是详细的攻略步骤:
1.创建数据库表格
这个步骤中你需要创建3张表
首先是学生表
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
);
其他两张表的代码如下:
CREATE TABLE `teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `student_teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`teacher_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_student_teacher_student_idx` (`student_id`),
KEY `fk_student_teacher_teacher_idx` (`teacher_id`),
CONSTRAINT `fk_student_teacher_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_student_teacher_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);
2. 定义实体类(Entity Class)
下面是 student 和 teacher 实体类的代码。在代码中,需要添加集合。目的是为了在集合中存储多个关联对象。
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "student_teacher",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "teacher_id")
)
private Set<Teacher> teachers;
// Getter 和 setter
}
@Entity
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "teachers")
private Set<Student> students;
// Getter 和 setter
}
3. 建立映射关系
在代码中,我们使用了注解来表示关联关系。下面的代码片段展示了两个实体之间 ManyToOne 的关系。
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "class_id")
private Class aClass;
// Getter 和 setter
}
@Entity
public class Class {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "aClass")
private Set<Student> students;
// Getter 和 setter
}
4. 建立 many-to-many 的关系
在实体类 Student 和 teacher 之间建立 many-to-many 关系,我们需要添加 @ManyToMany 注解。
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "student_teacher",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "teacher_id")
)
private Set<Teacher> teachers;
// Getter 和 setter
}
@Entity
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "teachers")
private Set<Student> students;
// Getter 和 setter
}
以上就是 Hibernate 实现 many-to-many 映射关系的攻略,在实际开发过程中可以根据具体情况对代码进行调整和优化,确保应用程序的性能和稳定性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Hibernate实现many-to-many的映射关系 - Python技术站