《Hibernate学习笔记十二》学生、课程、分数关系的设计与实现

《Hibernate学习笔记十二》学生、课程、分数关系的设计与实现

这个马士兵老师的Hibernate视频学习的一个题目,这里面要用到多对多、多对一的关联关系以及联合主键,因此觉得挺好的,自己写篇博文来记录下。

先考虑数据库表

1、学生表:为简单起见,只考虑了学生id和学生姓名,其中id为主键

2、课程表:为简单起见,只考虑了课程id和课程名称,其中id为主键

3、分数表

分数表有两种解决方案

3.1 第一种为:使用联合主键:student_id 和 course_id

3.2 第二种:不使用联合主键,而使用id作为主键

在这里,这篇博文所采取的方法是采用第二种方法:即不使用联合主键,使用id作为主键

在考虑实体类,以及它们的映射关系

一个学生可以选择多个课程,一个课程可以被多个学生选择,即学生和课程是一个多对多的关系。而一个学生可以有多个分数,因此,分数与学生是多对一的关系,同理,分数与课程也是多对一的关系。

下面开始设计

Student实体与Course类之间时多对多的关系,但是,一般情况下,我们需要通过学生来获取他的全部课程,因此,我们需要这样一个导向,有时,我们也需要通过课程,来提取选择这门课的学生,因此,我们建立双向关联。

Student类

@Entity
    public class Student {
   

    private int id;
    private String name;
    /*
     * Student和Course是多对多的关系,
     * 由于我们一般需要通过Student来获取Course,而不需要通过Course来获取Student,
     * 因此我们建立一个单向导向
     * */
    private Set<Course> courses=new HashSet<Course>();
    @ManyToMany(cascade=CascadeType.ALL)
    //设置中间表,中间表必须的名称必须与Score一致
    @JoinTable(name = "score",
            joinColumns = @JoinColumn(name="student_id"),
            inverseJoinColumns = @JoinColumn(name="course_id")
        )
    public Set<Course> getCourses() {
        
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值