hibernate 关联关系 详解 二 没有解释,要自己悟

数据库表结构

//多对多关联表  老师与课程间的关系中间表
CREATE TABLE `test_teacher_choice_curriculum` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `curriculum_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

//多对多关联表  老师与班级间的关系中间表
CREATE TABLE `test_teacher_choice_class` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

//老师表
CREATE TABLE `test_teacher` (
  `teacher_id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_name` varchar(255) DEFAULT NULL,
  `techaer_sex` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`teacher_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

//学生信息表  存储省份证的
CREATE TABLE `test_studentinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sid` int(11) DEFAULT NULL,
  `card` char(18) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK9AF4A93C826CC8FA` (`sid`),
  CONSTRAINT `FK9AF4A93C826CC8FA` FOREIGN KEY (`sid`) REFERENCES `test_student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

//多对多关联表 学生与老师间的中间关系表
CREATE TABLE `test_student_choice_teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sid` int(11) DEFAULT NULL,
  `teacher_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

//多对多关系  学生与课程间的中间关系表
CREATE TABLE `test_student_choice_curriculum` (
  `choice_id` int(11) NOT NULL AUTO_INCREMENT,
  `sid` int(11) DEFAULT NULL,
  `curriculum_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`choice_id`),
  KEY `FKD6929328826CC8FA` (`sid`),
  KEY `FKD6929328A9CF2849` (`curriculum_id`),
  CONSTRAINT `FKD6929328826CC8FA` FOREIGN KEY (`sid`) REFERENCES `test_student` (`sid`),
  CONSTRAINT `FKD6929328A9CF2849` FOREIGN KEY (`curriculum_id`) REFERENCES `test_curriculum` (`curriculum_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

//学生表
CREATE TABLE `test_student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `class_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `FK4347BB8E321E8D39` (`class_id`),
  CONSTRAINT `FK4347BB8E321E8D39` FOREIGN KEY (`class_id`) REFERENCES `test_classinfo` (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

//课程表
CREATE TABLE `test_curriculum` (
  `curriculum_id` int(11) NOT NULL AUTO_INCREMENT,
  `curriculum_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`curriculum_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

//班级表
CREATE TABLE `test_classinfo` (
  `class_id` int(11) NOT NULL AUTO_INCREMENT,
  `class_name` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
package hibernate.entity1;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * 班级
 * */
@Entity
@Table(name="test_classinfo")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Class 
{

    /**
     * 班级id
     * */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="class_id",nullable=false)
    private int classId;

    /**
     * 班级名称
     * */
    @Column(name="class_name",nullable=false)
    private String name;

    /**
     * 班级与学生之间的关系  一对多关联关系
     * */
    @OneToMany(targetEntity=Student.class,cascade={CascadeType.REFRESH,CascadeType.REMOVE},fetch=FetchType.LAZY)
    @JoinColumn(name="class_id",referencedColumnName="class_id",insertable=false,updatable=false)
    private List<Student> studentList;

    /**
     * 班级与老师之间的关系  多对多
     * */
    @ManyToMany(targetEntity=Teacher.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinTable(
        name="test_teacher_choice_class",
        joinColumns={
                @JoinColumn(name="class_id",insertable=false,updatable=false)
        },
        inverseJoinColumns={
                @JoinColumn(name="teacher_id")
        }
    )
    public List<Teacher> teacherList;

    public void setClassId(int class_id)
    {
        this.classId = class_id;
    }

    public int getClassId()
    {
        return this.classId;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return this.name;
    }

    public void setStudentList(List<Student> listStudent)
    {
        this.studentList = listStudent;
    }

    public List<Student> getStudentList()
    {
        return this.studentList;
    }

    public void setTeacherList(List<Teacher> teacherList)
    {
        this.teacherList = teacherList;
    }

    public List<Teacher> getTeacherList()
    {
        return this.teacherList;
    }
}
package hibernate.entity1;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

/**
 * 课程
 * */
@Entity
@Table(name="test_curriculum")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Curriculum 
{
    /**
     * 课程id
     * */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="curriculum_id")
    private int curriculumId;

    /**
     * 课程名称
     * */
    @Column(name="curriculum_name",nullable=false)
    private String curriculumName;

    /**
     * 课程与学生的关系  多对多  
     * */
    @ManyToMany(targetEntity=Student.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinTable(
        name="test_student_choice_curriculum",
        joinColumns={
                @JoinColumn(name="curriculum_id",insertable=false,updatable=false)
        },
        inverseJoinColumns={
                @JoinColumn(name="sid")
        }
    )
    private List<Student> students;

    /**
     * 课程与老师之间的关系  多对多
     * */
    @ManyToMany(targetEntity=Teacher.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinTable(
        name="test_teacher_choice_curriculum",
        joinColumns={
                @JoinColumn(name="curriculumn_id",insertable=false,updatable=false)
        },
        inverseJoinColumns={
                @JoinColumn(name="teacher_id")
        }
    )
    private List<Teacher> teachers;

    public void setCurriculumId(int curriculumId)
    {
        this.curriculumId = curriculumId;
    }

    public int getCurriculumId()
    {
        return this.curriculumId;
    }

    public void setCurriculumName(String curriculumName)
    {
        this.curriculumName = curriculumName;
    }

    public String getCurriculumName()
    {
        return this.curriculumName;
    }

    public void setTeachers(List<Teacher> teachers)
    {
        this.teachers = teachers;
    }

    public List<Teacher> getTeachers()
    {
        return this.teachers;
    }

    public void setStudents(List<Student> students)
    {
        this.students = students;
    }

    public List<Student> getStudents()
    {
        return this.students;
    }
}
package hibernate.entity1;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 学生
 * */
@Entity
@Table(name="test_student")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Student 
{

    /**
     * 学生id
     * */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="sid",nullable=false)
    private int sid;

    /**
     * 所属班级id
     * */
    @Column(name="class_id",nullable=false)
    private int classId;

    /**
     * 学生姓名
     * */
    @Column(name="name",nullable=false)
    private String name;

    /**
     * 性别
     * */
    @Column(name="sex")
    private String sex;

    /**
     * 学生和班级之间的关系  多对一
     * */
    @ManyToOne(targetEntity=Class.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinColumn(name="class_id",referencedColumnName="class_id",insertable=false,updatable=false)
    private Class classInfo;

    /**
     * 学生和身份证的关系 一对一
     * */
    @OneToOne(targetEntity=StudentInfo.class,cascade={CascadeType.REFRESH,CascadeType.REMOVE},fetch=FetchType.LAZY)
    @JoinColumn(name="sid",referencedColumnName="sid",insertable=false,updatable=false)
    private StudentInfo studentInfo;

    /**
     * 学生和课程之间的关系  多对多
     * */
    @ManyToMany(targetEntity=Curriculum.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinTable(
        name="test_student_choice_curriculum",
        joinColumns = {
            @JoinColumn(name="sid",insertable=false,updatable=false)
        },
        inverseJoinColumns={
            @JoinColumn(name="curriculum_id",referencedColumnName="curriculum_id")
        }
    )
    private List<Curriculum> curriculums;

    /**
     * 学生和老师之间的关系 多对多
     * */
    @ManyToMany(targetEntity=Teacher.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinTable(
        name="test_student_choice_teacher",
        joinColumns={
            @JoinColumn(name="sid",insertable=false,updatable=false)
        },
        inverseJoinColumns={
            @JoinColumn(name="teacher_id")
        }
    )
    private List<Teacher> teachers;

    public void setSid(int sid)
    {
        this.sid = sid;
    }

    public int getSid()
    {
        return this.sid;
    }

    public void setClassId(int class_id)
    {
        this.classId = class_id;
    }

    public int getClassId()
    {
        return this.classId;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return this.name;
    }

    public void setSex(String sex)
    {
        this.sex = sex;
    }

    public String getSex()
    {
        return this.sex;
    }

    public void setClassInfo(Class classInfo)
    {
        this.classInfo = classInfo;
    }

    public Class getClassInfo()
    {
        return this.classInfo;
    }

    public void setStudentInfo(StudentInfo studentInfo)
    {
        this.studentInfo = studentInfo;
    }

    public StudentInfo getStudentInfo()
    {
        return this.studentInfo;
    }

    public void setCurriculums(List<Curriculum> curriculums)
    {
        this.curriculums = curriculums;
    }

    public List<Curriculum> getCurriculums()
    {
        return this.curriculums;
    }

    public void setTeachers(List<Teacher> teachers)
    {
        this.teachers = teachers;
    }

    public List<Teacher> getTeachers()
    {
        return this.teachers;
    }
}
package hibernate.entity1;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 学生身份证
 * */
@Entity
@Table(name="test_studentinfo")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class StudentInfo
{
    /**
     * 表id
     * */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id",nullable=false)
    private int id;

    /**
     * 学生sid
     * */
    @Column(name="sid",nullable=false)
    private int sid;

    /**
     * 身份证号码
     * */
    @Column(name="card",length=18,nullable=false)
    private String card;

    /**
     * 与学生之间的一对一关系
     * */
    @OneToOne(targetEntity=Student.class,fetch=FetchType.LAZY,cascade={CascadeType.REFRESH,CascadeType.REMOVE})
    @JoinColumn(name="sid",referencedColumnName="sid",insertable=false,updatable=false)
    private Student student;

    public void setId(int id)
    {
        this.id = id;
    }

    public int getId()
    {
        return this.id;
    }

    public void setCard(String card)
    {
        this.card = card;
    }

    public String getCard()
    {
        return this.card;
    }

    public void setSid(int sid)
    {
        this.sid = sid;
    }

    public int getSid()
    {
        return this.sid;
    }

    public void setStudent(Student student)
    {
        this.student = student;
    }

    public Student getStudent()
    {
        return this.student;
    }
}
package hibernate.entity1;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

/**
 * 老师
 * */
@Entity
@Table(name="test_teacher")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Teacher
{
    /**
     * 老师id
     * */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="teacher_id",nullable=false)
    private int teacherId;

    /**
     * 老师姓名
     * */
    @Column(name="teacher_name",nullable=false)
    private String teacherName;

    /**
     * 老师性别
     * */
    @Column(name="teacher_sex",nullable=false)
    private String teacherSex;

    /**
     * 老师和学生之间的关系 多对多
     * */
    @ManyToMany(targetEntity=Student.class,cascade=CascadeType.REFRESH,fetch=FetchType.LAZY)
    @JoinTable(
        name="test_student_choice_teacher",
        joinColumns={
                @JoinColumn(name="teacher_id",insertable=false,updatable=false)
        },
        inverseJoinColumns={
                @JoinColumn(name="sid")
        }
    )
    private List<Student> studentList;

    /**
     * 老师和班级之间的关系  多对多
     * */
    @ManyToMany(targetEntity=Class.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinTable(
        name="test_teacher_choice_class",
        joinColumns={
            @JoinColumn(name="teacher_id",insertable=false,updatable=false)
        },
        inverseJoinColumns={
            @JoinColumn(name="class_id")    
        }
    )
    private List<Class> classes;

    /**
     * 老师与课程之间的关系  多对多 (比如我们老师又教mysql,又教java,还教javascript 的基本语法)
     * */
    @ManyToMany(targetEntity=Curriculum.class,fetch=FetchType.LAZY,cascade=CascadeType.REFRESH)
    @JoinTable(
        name="test_teacher_choice_curriculum",
        joinColumns={
                @JoinColumn(name="teacher_id",insertable=false,updatable=false)
        },
        inverseJoinColumns={
                @JoinColumn(name="curriculum_id")
        }
    )
    private List<Curriculum> curriculums;

    public void setTeacherId(int teacherId)
    {
        this.teacherId = teacherId;
    }

    public int getTeacherId()
    {
        return this.teacherId;
    }

    public void setTeacherName(String teacherName)
    {
        this.teacherName = teacherName;
    }

    public String getTeacherName()
    {
        return this.teacherName;
    }

    public void setTeacherSex(String teacherSex)
    {
        this.teacherSex = teacherSex;
    }

    public String getTeacherSex()
    {
        return this.teacherSex;
    }

    public void setStudentList(List<Student> students)
    {
        this.studentList = students;
    }

    public List<Student> getStudentList()
    {
        return this.studentList;
    }

    public void setClasses(List<Class> classes)
    {
        this.classes = classes;
    }

    public List<Class> getClasses()
    {
        return this.classes;
    }

    public void setCurriculums(List<Curriculum> curriculums)
    {
        this.curriculums = curriculums;
    }

    public List<Curriculum> getCurriculums()
    {
        return this.curriculums;
    }
}

demo测试类

package main;

import java.util.HashMap;
import java.util.List;
import java.util.Map;



import hibernate.bean.HibernateBean;
import hibernate.bean.HibernateBeanRealization;
import hibernate.entity1.*;

public class index2     
{

    public static void main(String[] args)
    {

        index1();
    }

    public static void index1()
    {
        HibernateBean hibernate = new HibernateBeanRealization();

        String hql = "from Class where class_id=:class_id";

        Map<String,Object> keyVal = new HashMap<String,Object>();

        keyVal.put("class_id", 1);

        //班级
        hibernate.entity1.Class classInfo = (hibernate.entity1.Class)hibernate.find(hql, keyVal);

        String bankName = classInfo.getName();

        echo("班级名称 : " + classInfo.getName());

        //该班级下的学生
        List<Student> students = classInfo.getStudentList();

        for(Student student : students)
        {
            echo(bankName + " 下的学生    : " + student.getName());
        }

        //该班级的老师
        List<Teacher> teacherList = classInfo.getTeacherList();

        for(Teacher teacher : teacherList)
        {
            echo(teacher.getTeacherName());
        }

        //第一个老师教的第一门课程
        echo(teacherList.get(0).getCurriculums().get(0).getCurriculumName());

        List<Curriculum> curriculums = teacherList.get(0).getCurriculums();

        for(Curriculum curriculum : curriculums)
        {
            for(Student student : curriculum.getStudents())
            {
                echo("student name : " + student.getName() + " card : " + student.getStudentInfo().getCard());
            }
        }
    }

    public static void echo(Object obj)
    {
        System.out.println(obj);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值