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,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...
随机推荐
- Android 脚本设计之 SL4A
SL4A的全称为Scripting Layer for Android, 顾名思义就是Android的脚本架构层,它的目的就是可以用熟知的脚本开发语言来开发Android应用程序.其工作原理基于RPC ...
- 使用LM2576制作数控电源
http://www.daxia.com/bibis/moredata30_1207792_29862.shtml 图中DA和PWM任选其一, 当DA或PWM输出为0~1.25V时,输出在12.5V~ ...
- mybatis如何根据mapper接口生成其实现类
SpringBoot集成mybatis mybatis的statement的解析与加载 mybatis如何根据mapper接口生成其实现类 mybatis的mapper返回map结果集 mybatis ...
- maven进阶:一个多模块项目
一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...
- web开发常见bug汇总
1.在做使用struts2进行文件上传时总是出现 java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOu ...
- Selenium2+python自动化29-js处理多窗口
前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没 ...
- eclipse中文字体大小修改,让中英文字体协调
貌似有不少人苦恼eclipse中文字体大小修改问题,默认的eclipse中文字体很小,和英文字体大小完全不在一个调子上,因为默认的eclipse juno中英文字体是Consolas,字体大小是10, ...
- 基于Android的ELF PLT/GOT符号重定向过程及ELF Hook实现(by 低端码农 2014.10.27)
引言 写这篇技术文的原因,主要有两个: 其一是发现网上大部分描写叙述PLT/GOT符号重定向过程的文章都是针对x86的.比方<Redirecting functions in shared EL ...
- ubuntu 常用配置
root 登录 sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf加:greeter-show-manual-login=true设 ...
- Coursera课程《Python数据结构》中课件
You can access the Google Drive containing all of the current and in-progress lecture slides for thi ...