范例:
考试与考试之间是一种多对多的关系:
(1)一个考生可以参加多场考试;
(2)一场考试可以有多个考生参加;
(3)不同的考生可以参加同一场考试;不同的考试可以有相同的考生。
考生类:User,中有成员变量private List<Exam> exams
考试类:Exam,中有成员变量 private List<User> users
在User.Java 中的配置:
- @ManyToMany
- @JoinTable(name = "t_user_exam", joinColumns =
- { @JoinColumn(name = "user_id") }, inverseJoinColumns =
- { @JoinColumn(name = "exam_id") })
- public List<Exam> getExams()
- {
- return exams;
- }
在Exam.java 中要配置:
- @ManyToMany(mappedBy = "exams")
- public List<User> getUsers()
- {
- return users;
- }
创建的中间表的名称是t_user_exam,其中user_id是参考考生id的外键;exam_id是参考考试id的外键。
sql语句:
15:24:37,390 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
create table t_user_exam (
user_id integer not null,
exam_id integer not null
)
15:24:37,453 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
alter table t_user_exam
add index FK331826084DE43CAB (exam_id),
add constraint FK331826084DE43CAB
foreign key (exam_id)
references Exam (id)
15:24:37,609 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
alter table t_user_exam
add index FK3318260894018D2B (user_id),
add constraint FK3318260894018D2B
foreign key (user_id)
references User (id)
单向与双向的区别:
(1)单向,只能从一方导航到另一方,不能反之;即只能从A导航到B,而不能从B导航到A;
双向,可以从一方导航到另一方,反之亦然;即既可以从A导航到B,也可以从B导航到A;
(2)单向,只需要配置导航始发地的类;
双向,两个类都需要配置。
注意:
(1)成员变量名称中最好不要有下划线;
(2)成员变量的类型中不要有ArrayList,应该用List 或Set