专栏首页帅哥哥写代码JPA关联关系表中加其他字段

JPA关联关系表中加其他字段

前言

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体[对象持久化]到数据库中。 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。(出自百度百科) JPA优点:上手快,使用简单。 JPA缺点:不适合关联关系复杂的项目。

正题

正常情况下使用@ManyToMany注解描述多对多关系时,JPA自动生成的表中是只包括两个对应实体的主键信息的。有些时候呢,就会遇到需要在关联表中加入想要的其他字段来辅助完成需求。比如部门与部门人之间关系。一个部门有多个人,一个又可以属于多个部门,一个人在不同的部门之间有不同的身份,在做展示的时候就涉及排序问题,一个人在不同的部门拥有不一样的排序。 这里以老师,学生,老师对每个学生的印象分来进行编码。主体思路就是将@ManyToMany生成的关系表单独作为一个类,使用两个@ManyToOne来进行实现。 一、老师实体类

package com.ysh.springboot.permissions.test;

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.OneToMany;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;

/**
 * 
 * @author ysh
 * @date 2020/01/03
 */
@Entity
@Table(name = "teacher")
@Getter
@Setter
public class Teacher {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private int age;


    @OneToMany(mappedBy = "teacher", fetch = FetchType.EAGER,cascade = CascadeType.ALL)
    private List<TeacherStudent> teacherStudents;


}

二、学生实体类

 package com.ysh.springboot.permissions.test;

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.OneToMany;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;
/**
 * 
 * @author ysh
 * @date 2020/01/03
 */
@Entity
@Table(name = "student")
@Getter
@Setter
 public class Student {

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private int id;
     
     @Column(name = "name")
     private String name;
     
     @OneToMany(mappedBy="student", fetch = FetchType.EAGER,cascade=CascadeType.ALL)
     private List<TeacherStudent> teacherStudents;

     
}

三、老师对学生印象分类

package com.ysh.springboot.permissions.test;

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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;

/**
 * 
 * @author ysh
 * @date 2020/01/03
 */
@Entity
@Table(name = "teacher_student")
@Getter
@Setter
public class TeacherStudent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "t_id")
    private Teacher teacher;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "s_id")
    private Student student;

    @JoinColumn()
    @Column(nullable=true,name="impression_score")
    private int impressionScore;


}

四、表生成结构

表生成结构

五、使用 通过关系表类来获取需要的辅助字段。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • hibernate 一对一,一对多,多对多关联关系使用

    一对一 如果我们只是单纯的在两个实体类中分别加上@OneToOne注解,会发现两张表都分别引入了对方的主键作为外键。明显的数据冗余,毕竟关系不...

    用户5166330
  • 基于spring security实现接口权限控制

    一、基于注解 (1)在security配置文件上配置@EnableGlobalMethodSecurity(prePostEnabled = true)注解 ...

    用户5166330
  • 自定义工作流设计

    工作偶尔会遇到需要审批相关的系统,对于流程步骤相对固定的,一般会采取某些第三方的工作流来做对应的系统。目前唯一用过的就是activiti工作流。对它进行了简单的...

    用户5166330
  • hibernate 一对一,一对多,多对多关联关系使用

    一对一 如果我们只是单纯的在两个实体类中分别加上@OneToOne注解,会发现两张表都分别引入了对方的主键作为外键。明显的数据冗余,毕竟关系不...

    用户5166330
  • Neo4j之导入数据

    通过neo4j-admin方式导入的话,需要暂停服务,并且需要清除graph.db,这样才能导入进去数据。而且,只能在初始化数据时,导入一次之后,就不能再次导入...

    分母为零
  • neo4j︱neo4j批量导入neo4j-import (五)

    版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! ...

    素质
  • Python中关于底图的操作

    Python基于其强大的功能越来越成为了科学利器,气象上对精细化的要求越来越高,对于底图的制作也越来越高。本人气象出身,长期用NCL画图,但是NCL对于精细化底...

    zhangqibot
  • 个人完善的springboot拦截器

    yunlgonn
  • Servlet的尾(yi)巴---filter ( 过滤器 )的小应用

            该,该,该.......,继之前说到的 Filter 现在用这个来做一个小小的应用----------》  铛,铛,铛,铛.....  ->_-...

    Gxjun
  • Qt界面UI之QML初见(学习笔记四)

    一 概述 QML是一种专门用于构建用户界面的编程语言,它允许用户构建高性能,具有流畅特效的可视化应用程序,QML是可读的,声明式的文档,具有类似JSON的语法,...

    用户1198337

扫码关注云+社区

领取腾讯云代金券