`

10 映射-- 多对多(老师与学生)

阅读更多

学生类:

package dao.po;

import java.util.Set;

/**
 * @author zl 学生类
 */
public class Student
{
	private int				id;

	private String			name;

	private Set<Teacher>	teachers;
}

 

老师类:

package dao.po;

import java.util.Set;

/**
 * @author zl 老师类
 */
public class Teacher
{
	private int				id;

	private String			name;

	private Set<Student>	students;
}

 

两个映射文件 :

<?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="dao.po">

	<class name="Student">		
		<id name="id">
			<generator class="native"/>
		</id>		
		<property name="name" not-null="true" length="255" column="`name`"/>
		
		<!-- name="teachers" 表示:Student类中有一个属性叫teachers (是Set集合)-->
		<!-- table="teacher_student" 表示:中间表表名叫teacher_student -->			
		<set name="teachers" table="teacher_student">
		
			<!-- column="student_id" 表示:中间表teacher_student的字段-->
			<!-- Student类的id与中间表teacher_student的字段student_id对应-->
			<key column="student_id"/>			
			
			<!-- column="teacher_id" 表示:中间表teacher_student的字段-->
			<!-- class="Teacher" 表示:中间表teacher_student的字段teacher_id与 Teacher类的id对应-->
			<many-to-many class="Teacher" column="teacher_id"/>
		</set>
	</class>
	
</hibernate-mapping>

 

<?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="dao.po">

	<class name="Teacher">		
		<id name="id">
			<generator class="native"/>
		</id>		
		<property name="name" not-null="true" length="255" column="`name`"/>
				
		<set name="students" table="teacher_student">
			<key column="teacher_id"/>			
			<many-to-many class="Student" column="student_id"/>
		</set>
	</class>
	
</hibernate-mapping>

 

 

保存操作,  查询就不说了:

package dao;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

import dao.po.Student;
import dao.po.Teacher;

public class Many2Many
{

	/**
	 * @param args
	 */
	public static void main(final String[] args)
	{
		add();
	}

	/**
	 * 添加几个老师与学生
	 */
	public static void add()
	{
		final Teacher t1 = new Teacher();
		t1.setName("语文老师");

		final Teacher t2 = new Teacher();
		t2.setName("数学老师");

		final Student s1 = new Student();
		s1.setName("学生小明");

		final Student s2 = new Student();
		s2.setName("学生小红");

		//		final Set<Teacher> set_t = new HashSet<Teacher>();
		//		set_t.add(t1);
		//		set_t.add(t2);

		final Set<Student> set_s = new HashSet<Student>();
		set_s.add(s1);
		set_s.add(s2);

		//给老师set 学生
		t1.setStudents(set_s); //建立关联,只在一方面建立关联就行了, 不可给学生set()了老师,再老师set()了学生
		t2.setStudents(set_s); //建立关联,只在一方面建立关联就行了, 不可给学生建了关联,再老师建关联

		//给学生set 老师
		//不可以再做

		Session session = null;
		try
		{
			session = HibernateUtil.getSeesion();
			final Transaction tx = session.beginTransaction();
			session.save(t1);
			session.save(t2);
			session.save(s1);
			session.save(s2);

			tx.commit();

		}
		finally
		{
			if (session != null)
			{
				session.close();
			}
		}
	}

}
// 中间表teacher_student 表结构如下 :
//| teacher_student | CREATE TABLE `teacher_student` (
//  `teacher_id` int(11) NOT NULL,
//  `student_id` int(11) NOT NULL,
//  PRIMARY KEY  (`student_id`,`teacher_id`),
//  KEY `FK2E2EF2DE4BF3A147` (`teacher_id`),
//  KEY `FK2E2EF2DE3B5856A7` (`student_id`),
//  CONSTRAINT `FK2E2EF2DE3B5856A7` FOREIGN KEY (`student_id`) REFERENCES `student
//` (`id`),
//  CONSTRAINT `FK2E2EF2DE4BF3A147` FOREIGN KEY (`teacher_id`) REFERENCES `teacher
//` (`id`)
//) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 49.8 KB
分享到:
评论
1 楼 zhangcheng 2009-03-09  
你考虑过更新么?我做的时候,更新无法更新中间表

相关推荐

    Spring+Hibernate 多对多关联映射---教师与学生表的级联增删改查

    本篇将深入探讨如何在Spring和Hibernate中实现多对多关联映射,并通过一个具体的教师与学生表的级联增删改查实例来阐述这一过程。 首先,多对多关联是数据库设计中的一种关系类型,表示一个实体可以与多个其他实体...

    MyBatis高级映射(一对多查询)

    在数据库关系模型中,一对多关系是常见的关联类型,例如一个学生可以对应多个课程,一个部门可以有多个员工等。MyBatis提供了一对多映射功能,使得在Java对象中可以直接获取到这种关联关系的数据。 1. **配置一对多...

    MyBatis高级映射(多对多查询)

    例如,学生和课程之间的关系就是典型的多对多,一个学生可以选修多门课程,一门课程也可以被多个学生选修。 在MyBatis中,处理多对多关系通常涉及到中间表或连接表,这个表用来存储两个主表的外键,形成关联。以下...

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    以学生、班级和班主任为例,学生与班级是一对多关系,班级与班主任是一对一关系。在`classInfo-mapper.xml`配置文件中,我们定义了三个`resultMap`:`resultStudentInfo`,`resultTeacherInfo`和`resultClassInfo`。...

    Hibernate之关联关系映射(一对多和多对一映射,多对多映射).docx

    1. 一对多与多对一映射: 在现实世界中,许多关系表现为一对多或多对一的形式。例如,一个老师可以教授多个学生,而一个学生只能被一个老师教导;同样,一个部门可以包含多个员工,但每个员工只属于一个部门。在...

    Hibernate关系映射 收藏

    一对多关系是指一个实体可以与多个其他实体关联,如一个教师可以教多个课程。在映射文件中,`One`端通常定义一个集合属性,如`Set`或`List`,并使用`bag`、`list`、`set`或`map`元素表示。例如,`Teacher`类可能有一...

    8映射与函数.ppt

    映射允许一对一、多对一或者一对多的关系,而函数只允许一对一的关系。换句话说,函数是映射的子集,其中每个输入都唯一决定了一个输出。 在学习过程中,学生需要理解映射的概念,能够独立思考和合作学习,以提高对...

    Hibernate 相关映射关系

    本篇将详细探讨Hibernate中的映射关系,主要包括实体之间的一对一、一对多、多对一和多对多四种关系映射。 1. **一对一映射(One-to-One)** 在一对一映射中,两个实体之间存在唯一的关联。这可以通过`@OneToOne`...

    数据库实验3-学生成绩管理系统

    在本数据库实验中,我们将构建一个学生成绩管理系统...总的来说,这个数据库实验将涉及数据库理论、C#编程、数据库设计与实施、以及用户界面开发等多个方面的知识,对于提升数据库管理和软件开发的综合能力非常有帮助。

    hibernate的关联关系映射

    此外,多对一关联实际上与一对多关联非常类似,唯一的区别在于外键的方向。在实际应用中,这种关联经常用于表示一个教师有多门课程,但每门课程只有一个任教教师。 总结来说,Hibernate的关联关系映射允许开发者...

    学生信息管理系统论文-java-文档-学生信息管理系统文档-论文

    根据给定文件的信息,我们可以提炼出以下相关的IT知识点: ### 一、系统环境与技术栈 #### 1.1 系统环境 - **操作系统**:Windows 或 Mac。...通过对各种技术的合理利用,实现了对学生信息的有效管理和便捷访问。

    hibernate关系映射

    一对多(One-to-Many)关系映射是最常见的关系类型,一个实体可以与多个其他实体相关联。在Java中,这通常通过`@OneToMany`注解实现。例如,一个教师可以教授多门课程,Teacher类和Course类之间就是一对多关系。...

    大一高等数学映射与函数PPT课件.pptx

    通过本课件,学生能够对集合、映射、函数等基础概念有深入的理解,并掌握函数的各种特性及其应用。本课件不仅适合教师在课堂教学中使用,也便于学生在自学时回顾和巩固知识点。借助于本课件的细致讲解和生动示例,...

    考试类精品--javaweb在线考试系统 学生+教师+管理员.zip

    该系统旨在提供一个便捷、高效、互动的在线平台,实现传统纸质考试向数字化的转变,提高教学效率,减轻教师工作负担,并帮助学生随时随地进行自我测试与学习。 1. **JavaWeb技术基础** JavaWeb是Java编程语言在Web...

    IBatis: Discriminator Column Example – Inheritance Mapping(Ibatis中的继承映射)

    -- 学生特有的属性映射 --&gt; &lt;!-- 教师特有的属性映射 --&gt; ``` 在测试方面,`test`目录下的文件可能是JUnit测试用例,用于验证`discriminator`列的映射是否正确工作。测试可能会包含插入数据,然后执行...

    多角色学生管理系统-java-基于SSMl的多角色学生管理系统设计与实现(毕业论文)

    《基于SSM框架的多角色学生管理系统设计与实现》 在信息技术日新月异的今天,学生管理系统已经成为了教育机构日常运营中不可或缺的一部分。本文主要介绍了一款基于Java技术,利用Spring、SpringMVC和MyBatis(SSM)...

    Hibernate-HQL语句多对多写法

    Hibernate 是一个流行的 Java 持久层框架,它提供了强大的对象关系映射(ORM)功能,使得开发者可以方便地与数据库交互。但是,在使用 Hibernate 时,我们经常会遇到多对多关系的问题,例如在菜单(Menu)和权限...

    毕业设计-- 学生档案管理系统

    2. Hibernate:作为对象关系映射(ORM)工具,Hibernate简化了数据库操作,将数据库表与Java类对应,使得开发者无需编写繁琐的SQL语句。在本系统中,Hibernate用于处理学生档案的存储和检索,确保数据的一致性和完整...

    管理系统系列--javaweb在线考试系统 学生+教师+管理员.zip

    【标题】:“管理系统系列--javaweb在线考试系统 学生+教师+管理员.zip”指出这是一个基于JavaWeb技术开发的在线考试系统,涵盖了学生、教师和管理员三个主要角色的功能。这个系统可能包括了完整的试题库管理、考试...

Global site tag (gtag.js) - Google Analytics