• 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;
        }
    
        
    }
    View Code

    课程类

    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;
        }
    
        
    
    }
    View Code

    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>
    View Code

    学生类配置文件

    <?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>
    View Code

    课程类配置文件 

    <?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>
    View Code

    测试类

    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()+"	"+c.getCname()+"	"+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();
        }
    
    }
    View Code
  • 相关阅读:
    Android_程序未处理异常的捕获与处理
    instanceof关键字
    乐优商城项目爬坑
    [LeetCode]Isomorphic Strings
    [LeetCode]Contains Duplicate II
    [LeetCode]Valid Sudoku
    [LeetCode]Valid Anagram
    [LeetCode]Contains Duplicate
    [LeetCode]Single Number
    [LeetCode]Valid Number
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4336937.html
Copyright © 2020-2023  润新知