一、创建数据表

--学生证表
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. tyvj 1031 热浪 最短路

    热浪 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://tyvj.cn/p/1031 Description 德克萨斯纯朴的民眾们这个夏天正在遭受 ...

  2. Mac下操作mysql

    修改密码 进入到mysql工作目录 cd /usr/local/mysql/bin/ 登录mysql mysql -u root -p 输入初始密码 mysql> 设置新密码 mysql> ...

  3. offsetLeft && left

    /* function getCss(obj,attr){ return window.getComputedStyle ? window.getComputedStyle(obj,null)[att ...

  4. appium+python自动化61-中文输入乱码问题解决

    前言 在夜神模拟器上输入中文,发现是乱码,将unicodeKeyboard和resetKeyboard参数设置为True了,发现还是没法解决. 打开手机设置语言和输入法,发现找不到Appium And ...

  5. 利用nginx加速web访问

    起因---------- 在最近新系统的设计中对于首页打开速度的问题做了一些考虑,由于页面上还是以动态数据为主,所以简单的静态化数据可能并不行,所以需要从业务和技术结合的角度去考虑这个问题.由于有些数 ...

  6. 解决kylin sync table报错:MetaException(message:java.lang.ClassNotFoundException Class org.apache.hive.hcatalog.data.JsonSerDe not found

    在kylin-gui中sync表default.customer_visit时报错: -- ::, ERROR [http-bio--exec-] controller.BasicController ...

  7. RecyclerView源码分析(一)--整体设计

    RecyclerView这个控件出来已经有一段时间了,如果看这篇文章的你,还没有使用过这个控件.那请先去学习怎样使用.不然看也白看.这里奉上一些关于介绍RecyclerView使用方法的优秀博客: 鸿 ...

  8. Informatica 常用组件Lookup之五 转换属性

    查找转换的属性标识数据库源.PowerCenter 如何处理转换,以及它如何处理高速缓存和多项匹配. 创建映射时,为每个查找转换指定属性.创建会话时,您可在会话属性中覆盖某些属性,如每个转换的索引和数 ...

  9. GoLang中flag标签使用

    正如其他语言一样,在 linux 系统上通过传入不同的参数来使得代码执行不同逻辑实现不同功能,这样的优点就是执行想要的既定逻辑而不需要修改代码重新编译与打包.在 Golang 语言中也为我们提供了相应 ...

  10. Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)

    很多手机游戏,在安装APK之后都得需要下载相应的资源包,然后才能进入游戏. 有这样一个需求:就是游戏中需要的资源包打在APK内,随apk一起进行安装到手机中. 这样就不需要,在安装APK之后,去下载资 ...