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

}

四、表生成结构

c2d4f103c63c?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

表生成结构

五、使用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值