Course.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="model">

<class name="Course" table="t_course">
        <id name="id" column="courseId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="courseName"></property>
    </class>

</hibernate-mapping>

Course2.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="model">

<class name="Course2" table="t_course2">
        <id name="id" column="courseId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="courseName"></property>
        <set name="students" table="student_course2" inverse="true">
            <key column="course_id"></key>
            <many-to-many class="model.Student2" column="student_id"></many-to-many>
        </set>
    </class>

</hibernate-mapping>

Student.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="model">

<class name="Student" table="t_student">
        <id name="id" column="studentId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="studentName"></property>
        <set name="courses" table="student_course" cascade="save-update">
            <key column="student_id"></key>
            <many-to-many class="model.Course" column="course_id"></many-to-many>
        </set>
    </class>

</hibernate-mapping>

Student2.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="model">

<class name="Student2" table="t_student2">
        <id name="id" column="studentId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="studentName"></property>
        <set name="courses" table="student_course2" cascade="save-update">
            <key column="student_id"></key>
            <many-to-many class="model.Course2" column="course_id"></many-to-many>
        </set>
    </class>

</hibernate-mapping>

StudentTest.java:

package service;

import java.util.Iterator;
import java.util.Set;

import model.Course;
import model.Course2;
import model.Student;
import model.Student2;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import util.HibernateUtil;

public class StudentTest {

SessionFactory sessionfactory=HibernateUtil.getSessionFactory();//获取Session工厂
    private Session session;
    
    @Before
    public void setUp() throws Exception {
        session=sessionfactory.openSession();//生成一个新的session
        session.beginTransaction();//开启事务
    }

@After
    public void tearDown() throws Exception {
        session.getTransaction().commit();//提交事务
        session.close();//关闭session
    }

@Test
    public void testSave1(){
        Course course1=new Course();
        course1.setName("语文");
        
        Course course2=new Course();
        course2.setName("数学");
        
        Student student1=new Student();
        student1.setName("一号");
        student1.getCourses().add(course1);
        student1.getCourses().add(course2);
        
        Student student2=new Student();
        student2.setName("二号");
        student2.getCourses().add(course1);
        student2.getCourses().add(course2);
        
        session.save(student1);
        session.save(student2);
    }
    
    @Test
    public void testLoad1(){
        Student student=(Student) session.get(Student.class,1);
        Set<Course> courses=(Set<Course>)student.getCourses();
        Iterator it=courses.iterator();
        while(it.hasNext()){
            Course c=(Course) it.next();
            System.out.println(c.getName());
        }
    }
    
    @Test
    public void testSave2(){
        Course2 course1=new Course2();
        course1.setName("语文");
        
        Course2 course2=new Course2();
        course2.setName("数学");
        
        Student2 student1=new Student2();
        student1.setName("三号");
        student1.getCourses().add(course1);
        student1.getCourses().add(course2);
        
        Student2 student2=new Student2();
        student2.setName("四号");
        student2.getCourses().add(course1);
        student2.getCourses().add(course2);
        
        session.save(student1);
        session.save(student2);
    }
    
    @Test
    public void testLoad2(){
        Course2 course=(Course2) session.get(Course2.class,1);
        Set<Student2> students=(Set<Student2>)course.getStudents();
        Iterator it=students.iterator();
        while(it.hasNext()){
            Student2 s=(Student2) it.next();
            System.out.println(s.getName());
        }
    }
}

hibernate多对多映射关系实现的更多相关文章

  1. java框架篇---hibernate(多对多)映射关系

    以学生和老师为例的来讲解多对多映射. 实体类: Student package cn.itcast.g_hbm_manyToMany; import java.util.HashSet; import ...

  2. hibernate笔记--单(双)向的多对多映射关系

    在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...

  3. hibernate(四) 双向多对多映射关系

    序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...

  4. Hibernate学习(四)———— 双向多对多映射关系

    一.小疑问的解答 问题一:到这里,有很多学习者会感到困惑,因为他不知道使用hibernate是不是需要自己去创建表,还是hibernate全自动,如果需要自己创建表,那么主外键这种设置也是自己设置吗? ...

  5. Hibernate的多对多映射关系

    example: 老师(teacher)和学生(Student)就是一个多对多的关系吧?老师可以有多个学生,学生也可以由多个老师,那在Hibernate中多对多是怎样实现的呢?? 在Hibernate ...

  6. Hibernate(五)之一对多&多对一映射关系

    既然我们讲到了一对多和多对一关系,必然要提到多表设计的问题.在开发中,前期需要进行需求分析,希求分析提供E-R图,根据ER图编写表结构. 我们知道表之间关系存在三种: 一对多&多对一:1表(主 ...

  7. Hibernate学习之映射关系

    一.Hibernate多对一关联映射:就是在“多”的一端加外键,指向“一”的一端. 比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系. 1.“多”端实体加入引用“一”端实体的变量及g ...

  8. Hibernate学习(五)Hibernate 多对多映射

    说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...

  9. java框架篇---hibernate(一对多)映射关系

    一对多关系可以分为单向和双向. 一对多关系单向 单向就是只能从一方找到另一方,通常是从主控类找到拥有外键的类(表).比如一个母亲可以有多个孩子,并且孩子有母亲的主键作为外键.母亲与孩子的关系就是一对多 ...

随机推荐

  1. servlet中的细节

    Get方法有大小限制:1024个字符.这些信息使用 Query_String头传递,并通过Query_String环境变量访问.Post方法:请求体信息使用FromData头传递.读取所有表单参数:g ...

  2. MVC知识点02

    MVC基础知识详情 1:在MVC中如果要从前台页面(.aspx)获取参数,只需要将其两个页面的参数设置成一样的,这样子MVC中的机制就会自动的将参数的值传到方法中. 2:在MVC中的方法要是两个都是相 ...

  3. Unity实现滑页效果(UGUI)

    简介 项目需要...直接展示效果吧: 原理 使用UGUI提供的ScrollRect和ScrollBar组件实现基本滑动以及自己控制每次移动一页来达到滑页的效果. 实现过程 1.创建两个panel,上面 ...

  4. 数组(Array)的使用方法

    本文内容:        1.概述         2.数组基础         3.结合for循环与arr.length,在数组尾部插入数值         4.利用'concat','join'实 ...

  5. Python基础:序列

    一.概述 序列类型(Sequence Types)类似于C中的数组,它是包含一组成员的连续列表,这些成员紧邻排列,并且可以通过序号(下标偏移量)访问其中的一个或多个成员.序列类型的示意图如下所示: P ...

  6. iis7 部署mvc4.0

    虽然用多了iis  但是很少重新去部署iis支持mvc4的环境,搞得每次需要的时候都要去百度, 所以现在自己写篇随笔来记录一下方便下次使用 建议先安装iis,再安装.net framework4.0, ...

  7. USE “schema_name” in PostgreSQL

    http://timmurphy.org/tag/mysql/ http://timmurphy.org/2009/11/17/use-schema_name-in-postgresql/ ===== ...

  8. linux压缩和解压命令总结

    一.tar.gz tar -xzvf 二.tar.bz2 tar.bz2 解压命令 bzip2 -d  gcc-4.1.0.tar.bz2---上面解压完之后执行下面的命令.执行成功后,会解压生成一个 ...

  9. Java编程思想读书笔记之内部类

    现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始 ...

  10. PHP PEAR2

    出错: Pyrus\Installer\Exception: Installation failed Pyrus\AtomicFileTransaction\MultiException: Unabl ...