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. javascript之纯数字验证

    现在有一个需求如下图: 产品经理说Card Number只能让输入数字(中间的空格是格式自加的,也是用js实现的),有时候我脑海中出现了个声音,啥玩意,加个type=number不就行了,事实发现图样 ...

  2. django book 阅读笔记

    一,django是一个十分优秀的python web的框架,那框架的是什么? 假设我们不使用框架来进行编写,我们要用如下的代码进行web脚本: #!/usr/bin/env python import ...

  3. IE11之F12 Developer Tools--DOM Explorer

    使用DOM Explorer工具查看网页的DOM状态.检查HTML结构和CSS样式,并测试更改以解决显示问题.这可以在元素位置错误或行为异常时帮助你诊断问题,然后解决问题. DOM Explorer图 ...

  4. 数论 - 欧拉函数模板题 --- poj 2407 : Relatives

    Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11372   Accepted: 5544 Descri ...

  5. linq之let子句

    在Linq查询中Let子句可以创建一个新的范围变量,并使用该变量保存表达式的结果. 看下面的例子: private void LetQuery() { List<UserBaseInfo> ...

  6. Java NIO中的读和写

    一.概述 读和写是I/O的基本过程.从一个通道中读取只需创建一个缓冲区,然后让通道将数据读到这个缓冲区.写入的过程是创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作. 二.从文件中读取 ...

  7. sencha grid templatecolumn模板列,actioncolumn和renderer实现单元格重绘

    templatecolumn列: {                                     xtype: 'templatecolumn',                     ...

  8. VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案

    今天在VS2010 sp1+sql server 2008 R2+Win7操作系统下测试ADO.NET 实体数据模型时 ,遇到这样一个问题. 首先建好实体模型,然后"根据模型生成数据库&qu ...

  9. 重新想象 Windows 8 Store Apps (51) - 输入: 涂鸦板

    [源码下载] 重新想象 Windows 8 Store Apps (51) - 输入: 涂鸦板 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 涂鸦板 通过 Poin ...

  10. 设计模式总结篇系列:观察者模式(Observer)

    观察者模式中通常有两个基本的概念主题:观察者和被观察者.当被观察者状态发生改变时,需要通知相应的观察者,当然,每个被观察者所对应的观察者可能不知一个,他们之间是1:n的关系.用专业一点的术语对观察者模 ...