Springboot整合Jpa复合主键插入数据库

今天用Jpa操作数据库的时候,有一个类在数据库存放并非一个主键确定一条数据,因为有若干数据有一个主键,去网上查阅了相关资料,发现了一个比较好用的方法是使用复合主键,大概意思就是一个类有多个主键来确定一条数据。

复合类

复合类继承Serializable,其中number和awardName确定唯一数据。

package com.evaluation.system.domain;

import java.io.Serializable;
import java.util.Objects;

public class AwardPK implements Serializable {

    private String number;

    private String awardName;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AwardPK awardPK = (AwardPK) o;
        return number.equals(awardPK.number) &&
                awardName.equals(awardPK.awardName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(number, awardName);
    }

    public AwardPK() {
    }

    public AwardPK(String number, String awardName) {
        this.number = number;
        this.awardName = awardName;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getAwardName() {
        return awardName;
    }

    public void setAwardName(String awardName) {
        this.awardName = awardName;
    }
}

Award

引入@IdClass(AwardPK.class)
多个主键@Id

package com.evaluation.system.domain;

import lombok.Data;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import java.io.Serializable;

@Entity
@Data
@IdClass(AwardPK.class)
public class Award implements Serializable {

    // 学号,主键
    @Id
    @Column(name = "number")
    private String number;

    // 姓名
    private String name;

    // 获奖类型
    private String type;

    // 奖项名称,复合主键
    @Id
    @Column(name = "awardName")
    private String awardName;

    // 加分数
    private int score;

    // 班级
    private String classMajor;

    public Award() {
    }

    public Award(String number, String name, String type, String awardName, int score, String classMajor) {
        this.number = number;
        this.name = name;
        this.type = type;
        this.awardName = awardName;
        this.score = score;
        this.classMajor = classMajor;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getAwardName() {
        return awardName;
    }

    public void setAwardName(String awardName) {
        this.awardName = awardName;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String getClassMajor() {
        return classMajor;
    }

    public void setClassMajor(String classMajor) {
        this.classMajor = classMajor;
    }

    @Override
    public String toString() {
        return "AwardTemp{" +
                "number='" + number + '\'' +
                ", name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", awardName='" + awardName + '\'' +
                ", score=" + score +
                ", classMajor='" + classMajor + '\'' +
                '}';
    }
}

AwardTemp

package com.evaluation.system.domain;

import lombok.Data;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import java.io.Serializable;

@Entity
@Data
@IdClass(AwardPK.class)
public class AwardTemp implements Serializable {

    // 学号,主键
    @Id
    @Column(name = "number")
    private String number;

    // 姓名
    private String name;

    // 获奖类型
    private String type;

    // 奖项名称,复合主键
    @Id
    @Column(name="awardName")
    private String awardName;

    // 加分数
    private int score;

    // 审核结果
    private String judge;

    // 驳回理由
    private String reason;

    // 班级
    private String classMajor;

    public AwardTemp() {
    }

    public AwardTemp(String number, String name, String type, String awardName, int score, String classMajor) {
        this.number = number;
        this.name = name;
        this.type = type;
        this.awardName = awardName;
        this.score = score;
        this.classMajor = classMajor;
    }

    public AwardTemp(String number, String name, String type, String awardName, int score, String judge, String reason, String classMajor) {
        this.number = number;
        this.name = name;
        this.type = type;
        this.awardName = awardName;
        this.score = score;
        this.judge = judge;
        this.reason = reason;
        this.classMajor = classMajor;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getAwardName() {
        return awardName;
    }

    public void setAwardName(String awardName) {
        this.awardName = awardName;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String getJudge() {
        return judge;
    }

    public void setJudge(String judge) {
        this.judge = judge;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public String getClassMajor() {
        return classMajor;
    }

    public void setClassMajor(String classMajor) {
        this.classMajor = classMajor;
    }

    @Override
    public String toString() {
        return "AwardTemp{" +
                "number='" + number + '\'' +
                ", name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", awardName='" + awardName + '\'' +
                ", score=" + score +
                ", judge='" + judge + '\'' +
                ", reason='" + reason + '\'' +
                ", classMajor='" + classMajor + '\'' +
                '}';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值