Hibernate(七)多对多映射

来源:互联网 发布:js 控制滚动条位置 编辑:程序博客网 时间:2024/05/16 16:43

一、创建数据表

复制代码
--学生证表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();    }}
原创粉丝点击