Hibernate中多对多

学生 - 老师

 1 package com.zhangpn.entity;
 2
 3 import java.util.HashSet;
 4 import java.util.Set;
 5
 6 public class Student {
 7     private Long id;
 8     private String name;
 9     private Set<Teacher> teachers = new HashSet<>();
10
11     public Long getId() {
12         return id;
13     }
14
15     public void setId(Long id) {
16         this.id = id;
17     }
18
19     public String getName() {
20         return name;
21     }
22
23     public void setName(String name) {
24         this.name = name;
25     }
26
27     public Set<Teacher> getTeachers() {
28         return teachers;
29     }
30
31     public void setTeachers(Set<Teacher> teachers) {
32         this.teachers = teachers;
33     }
34
35     public Student() {
36     }
37
38     public Student(String name, Set<Teacher> teachers) {
39         this.name = name;
40         this.teachers = teachers;
41     }
42
43 }

Student

 1 package com.zhangpn.entity;
 2
 3 import java.util.HashSet;
 4 import java.util.Set;
 5
 6 public class Teacher {
 7     private Long id;
 8     private String name;
 9     private Set<Student> students = new HashSet<>();
10
11     public Long getId() {
12         return id;
13     }
14
15     public void setId(Long id) {
16         this.id = id;
17     }
18
19     public String getName() {
20         return name;
21     }
22
23     public void setName(String name) {
24         this.name = name;
25     }
26
27     public Set<Student> getStudents() {
28         return students;
29     }
30
31     public void setStudents(Set<Student> students) {
32         this.students = students;
33     }
34
35     public Teacher() {
36     }
37
38     public Teacher(String name, Set<Student> students) {
39         this.name = name;
40         this.students = students;
41     }
42
43 }

Teacher



学生配置 - 老师配置

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <class name="com.zhangpn.entity.Student" table="STUDENT">
 6         <id name="id" type="java.lang.Long">
 7             <column name="ID" />
 8             <generator class="native" />
 9         </id>
10         <property name="name" type="java.lang.String">
11             <column name="NAME" />
12         </property>
13         <set name="teachers" table="STUDENT_TEACHER" inverse="false" lazy="true">
14             <key>
15                 <column name="STUDENTID" />
16             </key>
17             <many-to-many class="com.zhangpn.entity.Teacher" column="TEACHERID"></many-to-many>
18         </set>
19     </class>
20 </hibernate-mapping>

Student.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <class name="com.zhangpn.entity.Teacher" table="TEACHER">
 6         <id name="id" type="java.lang.Long">
 7             <column name="ID" />
 8             <generator class="native" />
 9         </id>
10         <property name="name" type="java.lang.String">
11             <column name="NAME" />
12         </property>
13         <set name="students" table="STUDENT_TEACHER" inverse="false" lazy="true">
14             <key>
15                 <column name="TEACHERID" />
16             </key>
17             <many-to-many class="com.zhangpn.entity.Student" column="STUDENTID"></many-to-many>
18         </set>
19     </class>
20 </hibernate-mapping>

Teacher.hbm.xml



中间表

学生
id name
   
中间表
stu_id tea_id
   
老师
id name
   


学生表

主键:ID



教师表

主键:ID



中间表:

主键:STUDENTID、TEACHERID

外键:STUDENTID、TEACHERID

原文地址:https://www.cnblogs.com/batj/p/9172503.html

时间: 2024-11-09 09:11:26

Hibernate中多对多的相关文章

hibernate中多对多关联

hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程与学生的关系就可以看成是多对多的关系,其中课程表的结构如下图所示: 学生表user 在关系数据库中不能直接建立多对多关联,要想建立这种多对多的关系只能借助第三张中间表, 因此为了建立这种多对多的关系我们需要建立第三张表User_course 为了实现表的多对多关联,需要在两个表的Hibernate配

关于hibernate中多对多关系

关于多对多关系 数据库:在使用多对多的关系时,我们可以使用复合主键.也可以不使用,直接引入外键同样可以实现. 在数据库中使用多对多关系时,需要一个中间表. 多对多关系中的数据库结构如下: 表:Orders 字段:orderid(主键)..... 表:Users 字段:usersid(主键),.... 中间表: cy_order_user 字段:cy_order_user主键id 外键:cy_orderid(引入Orders表) 外键:cy_usersid(引入Users表) 注意:中间表的外键是

hibernate中多对多的注解配置

hibernate多对多的注解配置中的自动生成中间表的配置: @Entity@Table(name="test_student")public class Students { @Id @SequenceGenerator(name="seqStudents",sequenceName="seq_test_student") @GeneratedValue(generator="seqStudents") private In

Hibernate中多对多关系转换

问题来源 在运用SSH架构开发Web应用时,总会遇到表之间一对多.多对一.多对多等等的关系,而对于多对多的关系,在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 问题解决 在此用开发OA项目时角色表和权限之间的多对多关系提供解决问题的建议 例子:角色与权限 (1)先看需求 (2)分析 第一,角色与权限:多对多 一个角色可以有多个权限,一个权限可以被多个角色使用 第二,在角色的增删改查中涉及到了

2018.11.4 Hibernate中多对多的关系

简单总结一下 多表关系 一对多/多对一 O 对象 一的一方使用集合. 多的一方直接引用一的一方. R 关系型数据库 多的一方使用外键引用一的一方主键. M 映射文件 一: 多: 操作: 操作管理级别属性. cascade: 级联操作 减少我们书写的操作代码. none(默认值) 不级联 save-update: 级联保存 delete: 级联删除 all: 级联保存+级联删除 结论: 可以使用save-update.不推荐使用delete. 也可以不用cascade. inverse: 反转关系

【SSH系列】Hibernate映射 -- 多对多关联映射

     映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张表中做一个关联,用第三张表来解决可能造成的数据冗余问题.今天这篇博文小编来简单的介绍一下hibernate中的多对多关联映射. 在某些系统中,一个用户可以有多个角色,一个角色也可以有多个用户,so,她们之间的关系就是多对多,多对多关联

Hibernate的多对多映射关系

example: 老师(teacher)和学生(Student)就是一个多对多的关系吧?老师可以有多个学生,学生也可以由多个老师,那在Hibernate中多对多是怎样实现的呢?? 在Hibernate中多对多关系分为两种:1单向的多对多,2双向的多对多 下面详细说明一些两种有什么不同和实现步骤 I单向的多对多实现步骤: 1新建teacher.student表,可以任意选择在其中一个表添加另一个表的集合,(例如在teacher中添加student的set<Student>集合,例如private

Hibernate中的映射关系(一对多)

在数据库中表和表之间的关系有几种,下面就详细说一下在Hibernate中怎样映射一对多的关系 Hibernate映射一对多的关系,其实就是持久类之间的映射,那如何把持久类关联起来呢??那就用到.hbm.xml文件的<many-to-one>标签了 具体做法如下: 新建一个customer类: package com.jeremy.hibernate.app.example; public class Customer { private Integer customerId; private

Hibernate中的inverse属性

Inverse属性 一.Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录! Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库.按照原来的映射文件,people.getAddresses().add(address),即主控方对象的状态发生了改变,因此数据库会跟着对