需要两个实体类,student和course ,多对多的关系,
采用三个表来实现,分别是m2mstudent 学生表,course 课程表,stdcourse学生课程表
实体类(全部省去无参构造和getter\setter)
public class Student {
private int sid;
private int scode;
private String sname;
private Set<Course> courses;
}
public class Course {
private int cid;
private String cname;
private Set<Student> students;
}
Hibernate映射文件
student.hbm.xml
<hibernate-mapping package="day4.m2m.entity">
<class name="Student" table="m2mstudent" >
<id name="sid" column="sid">
<generator class="sequence">
<param name="sequence">student_seq</param>
</generator>
</id>
<property name="scode"></property>
<property name="sname"></property>
<set name="courses" inverse="true" table="stdcourse" cascade="all">
<!--指定关联的外键列-->
<key column="sid"></key>
<!--用以映射关联类属性-->
<many-to-many class="Course" column="cid"></many-to-many>
</set>
</class>
</hibernate-mapping>
course.hbm.xml
<hibernate-mapping package="day4.m2m.entity">
<class name="Course" table="course">
<id name="cid" column="cid">
<generator class="native"></generator>
</id>
<property name="cname"></property>
<set name="students" inverse="false" table="stdcourse" cascade="all">
<!--指定关联的外键列-->
<key column="cid"></key>
<!--用以映射关联类属性-->
<many-to-many class="Student" column="sid"></many-to-many>
</set>
</class>
</hibernate-mapping>
测试代码: 别笑 :-)
public class TestM2M {
public static void main(String[] args) {
//表控制权位于Course中
Course c1 = new Course();
Course c2 = new Course();
Course c3 = new Course();
Course c4 = new Course();
c1.setCname("语文");
c2.setCname("数学");
c3.setCname("化学");
c4.setCname("生物");
Student s1 = new Student(100,"周哥哥");
Student s2 = new Student(101,"周姑姑");
Student s3 = new Student(102,"周弟弟");
Student s4 = new Student(103,"周妹妹");
Student s5 = new Student(104,"周姐姐");
Student s6 = new Student(105,"周爸爸");
Student s7 = new Student(106,"周妈妈");
Student s8 = new Student(107,"周爷爷");
Student s9 = new Student(108,"周奶奶");
Student s10 = new Student(109,"周舅舅");
Student s11 = new Student(110,"周婶婶");
Student s12 = new Student(111,"周姥姥");
Set<Student> stu_yuwen = new HashSet<Student>();
stu_yuwen.add(s1);
stu_yuwen.add(s2);
stu_yuwen.add(s3);
stu_yuwen.add(s5);
Set<Student> stu_shuxue = new HashSet<Student>();
stu_shuxue.add(s2);
stu_shuxue.add(s4);
stu_shuxue.add(s7);
stu_shuxue.add(s9);
stu_shuxue.add(s11);
Set<Student> stu_huaxue = new HashSet<Student>();
stu_huaxue.add(s1);
stu_huaxue.add(s3);
stu_huaxue.add(s7);
stu_huaxue.add(s9);
Set<Student> stu_shengwu = new HashSet<Student>();
stu_shengwu.add(s6);
stu_shengwu.add(s8);
stu_shengwu.add(s10);
stu_shengwu.add(s1);
stu_shengwu.add(s2);
stu_shengwu.add(s3);
c1.setStudents(stu_yuwen);
c2.setStudents(stu_shuxue);
c3.setStudents(stu_huaxue);
c4.setStudents(stu_shengwu);
Session ss = DBFactory.getSession();
Transaction ts = ss.beginTransaction();
ss.save(c1);
ss.save(c2);
ss.save(c3);
ss.save(c4);
ts.commit();
ss.close();
}
}
或许保存Student到数据库更符合人们的习惯
只需要将xml文件中的inverse对调,然后更改到如下测试代码
public static void main(String[] args) {
//表控制权位于Student中
Course c1 = new Course();
Course c2 = new Course();
Course c3 = new Course();
Course c4 = new Course();
Course c5 = new Course();
Course c6 = new Course();
Course c7 = new Course();
Course c8 = new Course();
c1.setCname("语文");
c2.setCname("数学");
c3.setCname("化学");
c4.setCname("生物");
c5.setCname("计算机");
c6.setCname("政治");
c7.setCname("历史");
c8.setCname("物理");
Student s1 = new Student(100,"周哥哥");
Student s2 = new Student(102,"周弟弟");
Student s3 = new Student(103,"周妹妹");
Student s4 = new Student(104,"周姐姐");
Set<Course> set1 = new HashSet<Course>();
set1.add(c1);
set1.add(c3);
set1.add(c5);
set1.add(c4);
set1.add(c2);
s1.setCourses(set1);
Set<Course> set2 = new HashSet<Course>();
set2.add(c1);
set2.add(c2);
set2.add(c3);
s2.setCourses(set2);
Set<Course> set3 = new HashSet<Course>();
set3.add(c3);
set3.add(c4);
set3.add(c5);
set3.add(c6);
set3.add(c7);
s3.setCourses(set3);
Set<Course> set4 = new HashSet<Course>();
set4.add(c1);
set4.add(c4);
set4.add(c5);
set4.add(c8);
s4.setCourses(set4);
Session ss = DBFactory.getSession();
Transaction ts = ss.beginTransaction();
ss.save(s1);
ss.save(s2);
ss.save(s3);
ss.save(s4);
ts.commit();
ss.close();
}
分享到:
相关推荐
以上就是关于Hibernate中实现多对一单向关联关系的基本知识,包括如何在实体类中定义关联、如何进行数据库操作以及如何查询关联对象。这个源代码示例应该提供了更具体的实现细节,你可以通过查看和运行它来深入理解...
本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关配置和操作。 一、多对多关联概述 在数据库设计中,多对多关联表示两个表之间的关系,如学生和课程的关系,一个学生可以选修多门课程,而...
以下是实现多对多关联关系的关键步骤: 1. **定义实体类**:首先,为涉及多对多关联的两个实体创建对应的Java类。例如,假设我们有`User`和`Role`两个实体,它们之间的关系是多对多。 ```java @Entity public ...
通过理解以上知识点,你可以有效地使用Hibernate实现多对多关系映射,并在实际项目中进行高效的数据操作。提供的压缩包文件可能包含了示例代码、SQL脚本以及详细的解释,这对于学习和实践这一主题非常有价值。
本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...
在Java的持久化框架Hibernate中...总的来说,这个项目提供了如何在SSH框架下实现多对多关系的实例,涵盖了从数据库设计到业务逻辑处理的全过程。通过学习和实践,开发者可以更好地理解和掌握Hibernate中的多对多关联。
在Hibernate中,多对多关联关系通过`<many-to-many>`标签来实现。你需要在两个实体的映射文件中分别定义对方的引用。例如,假设我们有两个实体,一个是“学生”(Student),另一个是“课程”(Course)。在Student...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
进行多对多查询时,我们可以通过Hibernate的Criteria API、HQL(Hibernate Query Language)或JPA的Query API来实现。例如,如果我们想找到所有选修了特定课程的学生,可以使用HQL: ```java String hql = "FROM ...
在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。本篇将深入探讨Hibernate如何处理这种复杂的数据关联。 一、多对多关系...
在Hibernate中,实现多对多映射主要涉及以下两个方面: 1. **配置映射文件(XML)**:在Hibernate的映射文件中,使用`<many-to-many>`标签定义多对多关系。需要指定关联表的`class`属性(对应Java类),`table`属性...
通过查看代码和运行示例,开发者可以深入理解Hibernate是如何自动处理复杂的关联操作,比如通过中间表实现多对多的添加、删除和查找。 **总结** 这个"Hibernate多对多实例+数据库代码"涵盖了ORM的核心概念,特别是...
本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...
本示例着重于如何利用Hibernate来实现不同类型的数据库表之间的关联,包括一对一、一对多、多对一以及多对多的关系。 **一对一关系:** 一对一关联通常发生在两个表之间有唯一对应关系时,比如一个用户只有一个账号...
在数据库层面,实现多对一和一对多关系通常涉及创建表之间的外键约束。但在本例中,作者提到了一种较为简化的设计方式,即不在数据库层面上明确设定外键,而是将逻辑关系的控制交给了Hibernate框架。这种方式虽然...
本篇文章将详细讲解"hibernate一对多与多对一"的关系映射概念,以及如何在实际开发中进行配置和使用。 首先,我们来看一下“一对多”关系。在现实世界中,这种关系可以对应到例如一个班级有多个学生,或者一个人...
本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...
总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...
总结来说,"Hibernate多对多"涉及到Java ORM框架Hibernate处理两个实体类之间的多对多关系的技术,在MyEclipse环境下进行开发,提供了从设计实体类、配置映射到实现业务逻辑的全套解决方案。通过提供的压缩包文件,...