zoukankan      html  css  js  c++  java
  • Hibernate 再接触 树状结构设计以及学生课程成绩表的设计

    1 树状结构的设计

    package com.bjsxt.hibernate;
    
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    
    @Entity
    public class Org {
        private int id;
        private String name;
        private Set<Org> children = new HashSet<Org>();
        private Org parent;
        @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;
        }
        @OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
        public Set<Org> getChildren() {
            return children;
        }
        public void setChildren(Set<Org> children) {
            this.children = children;
        }
        
        @ManyToOne
        @JoinColumn(name="parent_id")
        public Org getParent() {
            return parent;
        }
        public void setParent(Org parent) {
            this.parent = parent;
        }
    }
        @Test
        public void testSave() {
            Org o = new Org();
            o.setName("总公司");
            Org o1 = new Org();
            o1.setName("分公司1");
            Org o2 = new Org();
            o2.setName("分公司2");
            Org o11 = new Org();
            o11.setName("分公司1下部门1");
            Org o12 = new Org();
            o12.setName("分公司1下部门2");
            
            o.getChildren().add(o1);
            o.getChildren().add(o2);
            o1.getChildren().add(o11);
            o1.getChildren().add(o12);
            o11.setParent(o1);
            o12.setParent(o1);
            o1.setParent(o);
            o2.setParent(o);
                    
            
            Session session = sessionFactory.openSession();
            session.beginTransaction();
            session.save(o);
        
            session.getTransaction().commit();
            session.close();
        }
        @Test
        public void testLoad() {
            testSave();
            Session session = sessionFactory.openSession();
            session.beginTransaction();
            Org o = (Org)session.load(Org.class, 1);
            print(o, 0);
            session.getTransaction().commit();
            session.close();
            
        }
        
        private void print(Org o, int level) {    //输出
            String preStr = "";
            for(int i=0; i<level; i++) {         //缩进
                preStr += "----";
            }
            System.out.println(preStr + o.getName());
            for(Org child : o.getChildren()) {
                print(child, level+1);
            }
        }

    Course

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

    score

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

    Student

    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;
        }
        
    }
    @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();
            
        }
        
  • 相关阅读:
    WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
    java socket 模拟im 即时通讯
    记录 serverSocket socket 输入,输出流,关闭顺序,阻塞,PrintWriter的一些问题.
    Socket 参数笔记
    MongoDB的DBREF 使用.
    MongoDB,子查询
    MongoDB,分组,聚合
    在SAP Data Intelligence Modeler里创建新的pipeline
    SAP Data Intelligence Modeler里的Kafka Producer和Kafka Consumer
    从SAP Leonardo到SAP Data Intelligence
  • 原文地址:https://www.cnblogs.com/frankzone/p/9603462.html
Copyright © 2011-2022 走看看