一、创建数据表

--学生证表
create table paper
(
pid number primary key,
pdesc varchar2(100) ,
sid number references student(sid) not null );
--课程表
create table course
(
cid int primary key,
cname varchar2(50),
cdesc varchar2(200)
);
--学生生和课程表的中间表
create table sc
(
sid number references student(sid),
cid int references course(cid)
);

二、创建持久化类和配置文件

学生类

package entity;

import java.util.HashSet;
import java.util.Set; /*
* 学生类
*/
public class Student implements java.io.Serializable { // Fields private static final long serialVersionUID = 1L;
private int sid;
private String sname;
private String sex;
//增加班级属性
private Grade grade;
//学生证类
private Paper paper;
//添加课程
private Set<Course> courses=new HashSet<Course>(); // Constructors /** default constructor */
public Student() {
} /** minimal constructor */
public Student(int sid) {
this.sid = sid;
} /** full constructor */
public Student(int sid, String sname, String sex ) { this.sid = sid; this.sname = sname;
this.sex = sex;
} // Property accessors public int getSid() {
return this.sid;
} public void setSid(int sid) {
this.sid = sid;
} public String getSname() {
return this.sname;
} public void setSname(String sname) {
this.sname = sname;
} public String getSex() {
return this.sex;
} public void setSex(String sex) {
this.sex = sex;
} public Grade getGrade() {
return grade;
} public void setGrade(Grade grade) {
this.grade = grade;
} public Paper getPaper() {
return paper;
} public void setPaper(Paper paper) {
this.paper = paper;
} public Set<Course> getCourses() {
return courses;
} public void setCourses(Set<Course> courses) {
this.courses = courses;
} }

课程类

package entity;

import java.util.HashSet;
import java.util.Set; /**
* 课程类
*/ public class Course implements java.io.Serializable { // Fields /**
*
*/
private static final long serialVersionUID = 1L;
private int cid;
private String cname;
private String cdesc;
private Set<Student> students = new HashSet<Student>(); // Constructors /** default constructor */
public Course() {
} /** minimal constructor */
public Course(int cid) {
this.cid = cid;
} /** full constructor */
public Course(int cid, String cname, String cdesc, Set <Student>students) {
this.cid = cid;
this.cname = cname;
this.cdesc = cdesc;
this.students = students;
} // Property accessors public int getCid() {
return this.cid;
} public void setCid(int cid) {
this.cid = cid;
} public String getCname() {
return this.cname;
} public void setCname(String cname) {
this.cname = cname;
} public String getCdesc() {
return this.cdesc;
} public void setCdesc(String cdesc) {
this.cdesc = cdesc;
} public Set<Student> getStudents() {
return students;
} public void setStudents(Set<Student> students) {
this.students = students;
} }

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory>
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
oracle.jdbc.OracleDriver
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property> <mapping resource="entity/Grade.hbm.xml" />
<mapping resource="entity/Student.hbm.xml" />
<mapping resource="entity/Paper.hbm.xml" />
<mapping resource="entity/Course.hbm.xml" /> </session-factory> </hibernate-configuration>

学生类配置文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="entity.Student" table="STUDENT" schema="ROOT">
<id name="sid" type="java.lang.Integer">
<column name="SID" precision="22" scale="0" />
<generator class="assigned" />
</id>
<property name="sname" type="java.lang.String">
<column name="SNAME" length="20" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" length="20" />
</property>
<!--配置grade属性 -->
<many-to-one name="grade" class="entity.Grade" cascade="save-update">
<!--指定学生表中的外键 -->
<column name="GID" />
</many-to-one>
<!-- 添加学生证的配置 -->
<one-to-one name="paper" class="entity.Paper" cascade="all" lazy="false" property-ref="student"/>
<!--添加课程 -->
<set name="courses" cascade="save-update" table="SC">
<key column="sid" />
<many-to-many class="entity.Course" column="cid"/>
</set>
</class>
</hibernate-mapping>

课程类配置文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="entity.Course" table="COURSE" schema="ROOT">
<id name="cid" type="java.lang.Integer">
<column name="CID" precision="22" scale="0" />
<generator class="assigned" />
</id>
<property name="cname" type="java.lang.String">
<column name="CNAME" length="50" />
</property>
<property name="cdesc" type="java.lang.String">
<column name="CDESC" length="200" />
</property>
<set name="students" table="SC" cascade="save-update" inverse="true">
<key column="cid" />
<many-to-many class="entity.Student" column="sid" />
</set>
</class>
</hibernate-mapping>

测试类

package Test;

import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; import entity.Course;
import entity.Student; public class Demo7 { public static void main(String[] args) {
delte(); }
public static void save(){
Student stu1 = new Student();
stu1.setSid(201503011);
stu1.setSname("赵云");
stu1.setSex("男"); //课程
Course c1=new Course();
c1.setCid(1111);
c1.setCname("长枪阵");
c1.setCdesc("杀进杀出"); Course c2=new Course();
c2.setCid(2222);
c2.setCname("大刀");
c2.setCdesc("青龙偃月刀"); stu1.getCourses().add(c1);
stu1.getCourses().add(c2); Session session =new Configuration().configure().buildSessionFactory().openSession();
Transaction tran=session.beginTransaction();
session.save(stu1); tran.commit();
session.close();
} public static void find(){ Session session =new Configuration().configure().buildSessionFactory().openSession();
Course c=(Course) session.get(Course.class, 1111);
System.out.println(c.getCid()+"\t"+c.getCname()+"\t"+c.getCdesc());
Set<Student> stus=c.getStudents();
for (Student s : stus) {
System.out.println(s.getSname());
}
session.close();
} public static void update(){ Session session =new Configuration().configure().buildSessionFactory().openSession();
Student stu=(Student) session.get(Student.class, 201509009); Course cou=(Course) session.get(Course.class, 2222); Transaction tran=session.beginTransaction();
stu.getCourses().add(cou);
session.update(stu);
tran.commit();
session.close();
}
public static void delte(){
Session session =new Configuration().configure().buildSessionFactory().openSession();
Student stu=(Student) session.get(Student.class, 201509009); Course cou=(Course) session.get(Course.class, 2222); Transaction tran=session.beginTransaction();
stu.getCourses().remove(cou);
session.update(stu);
tran.commit();
session.close();
} }

Hibernate(八)多对多映射的更多相关文章

  1. Hibernate的多对一映射

    一.创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql.Oracle.SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下 ...

  2. Hibernate的多对多映射关系

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

  3. hibernate单向多对一映射

    n21: 1.new 两个实体类,一个代表"多"的一端,一个代表"一"的一端. Customer类: public class Customer { priva ...

  4. hibernate之多对多映射

    目录 第一章 多对多的应用场景 第二章 多对多的映射配置案例 2-1 创建项目和表 2-2 创建持久化类和映射文件 2-3 配置映射文件 2-4 测试 第三章 总结 源码地址:https://gith ...

  5. hibernate 2 多对多映射

    一.实体类 1.Classes.java package cn.gs.wwg.entity; import java.util.Set; public class Classes { private ...

  6. Hibernate的多对多映射

    一.创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql.Oracle.SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下 ...

  7. 【Hibernate框架】关联映射(多对多关联映射)

    按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...

  8. 【Hibernate框架】关联映射(一对多,多对一)

    根据我们的总结计划,上篇文章我们总结了有关于一对一映射相关知识,接下来,我们进行下一个阶段,一对多.多对一映射相关知识. 场景设定: 国家规定,一个人只能在一个公司上班,一个公司可以拥有很多员工.我们 ...

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

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

随机推荐

  1. zoj 3157 Weapon 逆序数/树状数组

    B - Weapon Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Sta ...

  2. 1、安装Redis的PHP扩展

    1.安装Redis的PHP扩展 1.1 安装phpize yum install php-devel 1.2 下载扩展源码包,直接用wget #wget下载github上的文件 wget https: ...

  3. antd 父组件获取子组件中form表单的值

    还是拿代码来讲吧,详情见注释 子组件 import React, { Component } from 'react'; import { Form, Input } from 'antd'; con ...

  4. 简单的文件上传html+ashx

    前台页面:<form action="upload.ashx" method="post" enctype="multipart/form-da ...

  5. 【转】JABC访问oracle数据库报ORA-12505

    Oracle 问题描述: 今天使用jdbc连接oracle 10.2.0.1.0 数据库的时候出现了下列错误: Connection refused(DESCRIPTION=(TMP=)(VSNNUM ...

  6. SPOJ 375. Query on a tree (动态树)

    375. Query on a tree Problem code: QTREE You are given a tree (an acyclic undirected connected graph ...

  7. 在EntityFramework6中管理DbContext的正确方式——2DbContext的默认行为(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...

  8. jQuery闭包之浅见,从面向对象角度来理解

    本篇的标题虽然是"jQuery闭包之浅见...",但实际上本篇涉及的多半是javascript"闭包"相关内容,之所以写这个标题,完全是因为自己平常用jQuer ...

  9. JSP 上传文件

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...

  10. H264 RTP封包原理(转载)

    1.  引言        随着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性.但人们又面临着另外一种不可避免的尴尬,就是在网络上看到生 ...