hibernate 映射-多对多双向

hibernate 中的多对多,在数据库中就是一张中间表,

范例:

考试与考试之间是一种多对多的关系:

(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

 

 

你可能感兴趣的:(Hibernate,xml,多对对)