Hibernate(八)多对多映射
一、创建数据表
--学生证表
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(八)多对多映射的更多相关文章
- Hibernate的多对一映射
一.创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql.Oracle.SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下 ...
- Hibernate的多对多映射关系
example: 老师(teacher)和学生(Student)就是一个多对多的关系吧?老师可以有多个学生,学生也可以由多个老师,那在Hibernate中多对多是怎样实现的呢?? 在Hibernate ...
- hibernate单向多对一映射
n21: 1.new 两个实体类,一个代表"多"的一端,一个代表"一"的一端. Customer类: public class Customer { priva ...
- hibernate之多对多映射
目录 第一章 多对多的应用场景 第二章 多对多的映射配置案例 2-1 创建项目和表 2-2 创建持久化类和映射文件 2-3 配置映射文件 2-4 测试 第三章 总结 源码地址:https://gith ...
- hibernate 2 多对多映射
一.实体类 1.Classes.java package cn.gs.wwg.entity; import java.util.Set; public class Classes { private ...
- Hibernate的多对多映射
一.创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql.Oracle.SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下 ...
- 【Hibernate框架】关联映射(多对多关联映射)
按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...
- 【Hibernate框架】关联映射(一对多,多对一)
根据我们的总结计划,上篇文章我们总结了有关于一对一映射相关知识,接下来,我们进行下一个阶段,一对多.多对一映射相关知识. 场景设定: 国家规定,一个人只能在一个公司上班,一个公司可以拥有很多员工.我们 ...
- hibernate笔记--单(双)向的多对多映射关系
在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...
随机推荐
- Codeforces Round #293 (Div. 2) B. Tanya and Postcard 水题
B. Tanya and Postcard time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces Round #293 (Div. 2) A. Vitaly and Strings
A. Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standar ...
- C#高级编程9-第9章 字符串和正则表达式
字符串和正则表达式 String类 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显 ...
- composer安装Workerman报错:Installation failed, reverting ./composer.json to its original content.
今天想在TP5上安装workerman,实现一个后台消息提醒功能. 第一步就卡住了,根据手册里说的首先通过composer安装 $ composer require topthink/think-wo ...
- oracle 取整的几种方法
--1.取整(大) select ceil(-1.001) value from dual ; --2.取整(小) select floor(-1.001) value from dual ...
- 多线程调试必杀技 - GDB的non-stop模式
作者:破砂锅 (转) 开源的GDB被广泛使用在Linux.OSX.Unix和各种嵌入式系统(例如手机),这次它又带给我们一个惊喜. 多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持a ...
- JavaScript 复制对象【Object.assign方法无法实现深复制】
在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...
- MySQL数据库事务各隔离级别加锁情况--read uncommitted篇(转)
本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解 ...
- andriod arcgis createPolygons创建带空的面
private void createPolygons() { // create input polygon 1 PointCollection pointsPoly = new PointColl ...
- Windows Server 2003 R2 IIS服务的命令行方式重启命令
iisreset /RESTART 停止后启动 iisreset /START 启动IIS (如果停止) iisreset /STOP 停止IIS (如果启动) iisreset /REB ...