zoukankan      html  css  js  c++  java
  • hibernate 映射实例 学生 课程 成绩

    学生和课程是多对多,一个学生的一个课程只能对应一个成绩。

    所以学生和课程多对多,其中间表多了一个成绩字段。

    可以这样设计:

    学生和课程通过中间表--成绩,多对多映射。

     

     

    手动建中间表语句:

    create table score(id int primary key auto_increment,student_id int refrences student(id),course_id int references course(id),score int);

     

     

    package com.bjsxt.hibernate;

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;

    @Entity
    public class Course {
        private int id;
        private String name;
        @Id
        @GeneratedValue
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
       
    }

     

     

    package com.bjsxt.hibernate;

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;

    @Entity
    @Table(name="score")
    public class Score {
        private int id;
        private int score;
        private Student student;
        private Course course;
        @Id
        @GeneratedValue
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public int getScore() {
            return score;
        }
        public void setScore(int score) {
            this.score = score;
        }
        @ManyToOne
        @JoinColumn(name="student_id")
        public Student getStudent() {
            return student;
        }
        public void setStudent(Student student) {
            this.student = student;
        }
       
        @ManyToOne
        @JoinColumn(name="course_id")
        public Course getCourse() {
            return course;
        }
        public void setCourse(Course course) {
            this.course = course;
        }
       
    }

     

     

    package com.bjsxt.hibernate;

    import java.util.HashSet;
    import java.util.Set;

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;

    @Entity
    public class Student {
        private int id;
        private String name;
        private Set<Course> courses = new HashSet<Course>();
       
        @ManyToMany
        @JoinTable(name="score",
            joinColumns=@JoinColumn(name="student_id", referencedColumnName="id"),
            inverseJoinColumns=@JoinColumn(name="course_id", referencedColumnName="id")
            )
        public Set<Course> getCourses() {
            return courses;
        }
        public void setCourses(Set<Course> courses) {
            this.courses = courses;
        }
        @Id
        @GeneratedValue
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
       
    }

     

     

    测试类

    package com.bjsxt.hibernate;

    import java.util.Map;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;

    public class HibernateTreeTest {
        private static SessionFactory sessionFactory;
       
        @BeforeClass
        public static void beforeClass() {
            //new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        }
        @AfterClass
        public static void afterClass() {
            sessionFactory.close();
        }
       
        @Test
        public void testSave() {
            Student s = new Student();
            s.setName("zhangsan");
            Course c = new Course();
            c.setName("java");
            Score score = new Score();
            score.setCourse(c);
            score.setStudent(s);
           
            Session session = sessionFactory.openSession();
            session.beginTransaction();
            session.save(s);
            session.save(c);
            session.save(score);
       
            session.getTransaction().commit();
            session.close();
        }
        @Test
        public void testLoad() {
            testSave();
            Session session = sessionFactory.openSession();
            session.beginTransaction();
           
            Student s = (Student)session.load(Student.class, 1);
            for(Course c : s.getCourses()) {
                System.out.println(c.getName());
            }
           
            session.getTransaction().commit();
            session.close();
           
        }
       
       
        @Test
        public void testSchemaExport() {
            new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
        }
       
       
        public static void main(String[] args) {
            beforeClass();
        }
    }

  • 相关阅读:
    Cmake编译SDL2
    glog的使用
    win32下编译glog
    快速阅读《QT5.9 c++开发指南》1
    applyColorMap()研究(如果我对现有的colormap不满意,那么如何具体来做)
    如何判断轮廓是否为圆
    libopencv_shape.so.3.0: cannot open shared object file: No such file or directory 解决笔记
    OpenCV和RTSP的综合研究
    识别复杂的答题卡1(主要算法)
    识别简单的答题卡(Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV——jsxyhelu重新整编)
  • 原文地址:https://www.cnblogs.com/flying607/p/3480310.html
Copyright © 2011-2022 走看看