Hibernate之关于多对多单向关联映射

简介:

老师和学生,最典型的多对多关联,


TeacherStudent,所谓单向意思就是说,老师知道自己的教的是哪些学生而学生不知道是哪些老师教。也可以这么说,在查询的时候,通过老师可以级联查询出学生,但是通过学生不可以级联查询出老师!


而多对多最麻烦的是怎么自定义我们中间表的,表名和列名,这个是重要的!


Annotations配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Entity
@Table (name= "t_teacher" )
publicclass Teacher {
     private  Integer id;
     private  String name;
     private  Set<Student> students= new  HashSet<Student>(); //set不允许重复,最适合数据库模型
     @Id
     @GeneratedValue
     public  Integer getId() {
        returnid;
     }
     publicvoid setId(Integerid) {
        this .id = id;
     }
     @Column (name= "t_name" )
     public  String getName() {
        returnname;
     }
     publicvoid setName(Stringname) {
        this .name = name;
     }
     @ManyToMany
     @JoinTable (name= "t_s_two" , //自定义表名
            joinColumns={ @JoinColumn (name= "teacher_id" )}, //自定义列名
            inverseJoinColumns={ @JoinColumn (name= "student_id" )}) //反转,和Teacher对应的那个表的列名,也是自定义
     public  Set<Student>getStudents() {
        returnstudents;
     }
     publicvoidsetStudents(Set<Student> students) {
        this .students = students;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Entity
@Table (name= "t_student" )
publicclass Student {
     private  Integer id;
     private  String name;
     private  Integer age;
     @Id
     @GeneratedValue
     public  Integer getId() {
        returnid;
     }
     publicvoid setId(Integerid) {
        this .id = id;
     }
     @Column (name= "s_name" )
     public  String getName() {
        returnname;
     }
     publicvoid setName(Stringname) {
        this .name = name;
     }
     @Column (name= "s_age" )
     public  Integer getAge() {
        returnage;
     }
     publicvoid setAge(Integerage) {
        this .age = age;
     }
}


XML配置


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
publicclass Teacher {
     private  Integer id;
     private  String name;
     private  Set<Student> students=newHashSet<Student>(); //set不允许重复,最适合数据库模型
     public  Integer getId() {
        returnid;
     }
     publicvoid setId(Integerid) {
        this .id = id;
     }
     public  String getName() {
        returnname;
     }
     publicvoid setName(Stringname) {
        this .name = name;
     }
     public  Set<Student>getStudents() {
        returnstudents;
     }
     publicvoidsetStudents(Set<Student> students) {
        this .students = students;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
publicclass Student {
     private  Integer id;
     private  String name;
     private  Integer age;
     public  Integer getId() {
        returnid;
     }
     publicvoid setId(Integerid) {
         this .id = id;
     }
     public  String getName() {
        returnname;
     }
     publicvoid setName(Stringname) {
        this .name = name;
     }
     public  Integer getAge() {
        returnage;
     }
     publicvoid setAge(Integerage) {
        this .age = age;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<? xml  version = "1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping  package = "csg.hibernate.entity" >
     < class  name = "Teacher"  table = "t_teacher" >
        < id  name = "id" >
            < column  name = "id" />
            < generator  class = "native"  />
        </ id >
        < property  name = "name"  />
        < set  name = "students"  table = "t_s_two" ><!—-自定义表名-->
            < key  column = "teacher_id" /><!—自定义列名-->
            < many-to-many  class = "csg.hibernate.entity.Student"  column = "student_id" /><!—自定义列名-->
        </ set >
     </ class >
</ hibernate-mapping >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? xml  version = "1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping  package = "csg.hibernate.entity" >
     < class  name = "Student"  table = "t_student" >
        < id  name = "id" >
            < column  name = "id" />
            < generator  class = "native"  />
        </ id >
        < property  name = "name"  />
        < property  name = "age"  />
     </ class >
</ hibernate-mapping >



以上就是XML的many-to-many(单向)的配置方法










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1568903,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Java 数据库连接 数据库
hibernate多对多、正向工程创建数据表——访问温馨提示
hibernate多对多、正向工程创建数据表——访问温馨提示
|
12月前
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
145 0
|
2月前
|
Java 数据库连接 数据库
Hibernate5中实体映射命名策略
Hibernate5中实体映射命名策略
67 0
|
2月前
|
SQL 存储 Java
Hibernate - 继承关联关系映射
Hibernate - 继承关联关系映射
48 0
|
2月前
|
机器学习/深度学习 SQL Java
Hibernate - 多对多关联关系映射
Hibernate - 多对多关联关系映射
43 0
|
2月前
|
SQL XML Java
Hibernate - 单向多对一关联关系映射
Hibernate - 单向多对一关联关系映射
21 0
|
Java 数据库连接 数据库
hibernate多对多、正向工程创建数据表——访问温馨提示
hibernate多对多、正向工程创建数据表——访问温馨提示
|
Java 数据库连接
mybatis-plus和hibernate 忽略映射字段
mybatis-plus和hibernate 忽略映射字段
259 1
|
XML Java 数据库连接
《Hibernate上课笔记》----class4----Hibernate继承关系映射实现详解
《Hibernate上课笔记》----class4----Hibernate继承关系映射实现详解
76 0
《Hibernate上课笔记》----class4----Hibernate继承关系映射实现详解
|
XML Java 数据库连接
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
55 0
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射