springboot @ManyToMany@JoinTable注解——数据库多对多关系

最近在学习的时候看到个新的注解@ManyToMany,花了很长时间学习,遇到了很多坑,在这里写出来,为大家提供个思路也为自己做个记录。

首先是多对多:举个例子,一个学生可以有多个老师,而一个老师也可以有多个学生,就可以说老师和学生的关系是多对多,那么在数据库中就是在A,B两个表中的每一个记录都与另一个表中的多个记录有关系,而这些多对多的关系我们希望能保存在一个中间的表里。

而@ManyToMany注解的功能,就是在springboot项目实体类中声明多对多的关系,使得通过对实体类的处理能维护中间表中的记录即数据。

具体实现:

role_role表:


role_user表:


springboot @ManyToMany@JoinTable注解——数据库多对多关系_第1张图片

中间表test(表名有点不成熟):




然后这边是通过IDEA连接数据库后自动生成的实体类:


springboot @ManyToMany@JoinTable注解——数据库多对多关系_第2张图片


springboot @ManyToMany@JoinTable注解——数据库多对多关系_第3张图片

而多对多关系中,存在维护方和被维护方,维护方顾名思义就是负责更新,维持两个表多对多关系,在这里也就是负责维护和更新中间表的数据的一方,所以在维护方和被维护方的实体类里面加的代码也有不同。我这里是把role_role作为维护方,所以在role_role实体类中加的代码为:


springboot @ManyToMany@JoinTable注解——数据库多对多关系_第4张图片

在这段代码中,首先生命了一个另一个实体类的set,之后在set的setter和getter方法上面通过@ManyToMany进行了注释,这边是声明这个set里的数据是和该实体对象存在一对多关系的。而下面的@JoinTable则是对中间表的声明了,name为标的名字,joinColumns是对维护方和中间表的外键的声明,而inverseJoinColumns是对被维护方和中间表的外键的声明。之后就是set的setter和getter方法

被维护方实体类加的代码:


springboot @ManyToMany@JoinTable注解——数据库多对多关系_第5张图片

首先也是一个另一个表实体类的set声明,然后是@ManyTomany的声明,可以发现这边的@ManyToMany的属性里面有一个mappedBy,这个属性是只有被维护方才有的,而这个属性的值也是另一个表中实体类里所加的那个这个实体类的set的变量名

另一个实体类中加的代码中的变量名

在这里也是将两个实体类相关联在一起,如果使用IDEA编程,还可以在set的setter和getter方法旁边看到

这个符号表示关联,点击能跳转

这样就可以了,现在通过Junit测试下:

springboot @ManyToMany@JoinTable注解——数据库多对多关系_第6张图片

发现运行的结果为

role_role表


role_user表


test表

接下来就讲讲我在这个过程中遇到的一些小问题,首先,中间表要先自己设计出来,外键约数应该可以不加,我的没加没出问题。然后是注解最好是放在set的setter和getter方法上面,而不是变量的上面。大概就酱。

ps:第一次写博客,有不对的地方请尽管指教。

你可能感兴趣的:(springboot @ManyToMany@JoinTable注解——数据库多对多关系)