欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring boot如何设置联合主键

程序员文章站 2022-04-25 07:49:10
...

Spring boot如何设置联合主键

前言

文章主要内容

  1. 如何设置主键并让其自增长
  2. 如何设置联合主键

前期准备

创建一个实体类

// An highlighted block
@Entity
public class Choice {

    //学生 id
    @Id
    private String sId;
    private int qId;
    private Integer status;
    public Choice() {
        super();
    }

    public Choice(String sId, int qId, Integer status ) {
        this.sId = sId;
        this.qId = qId;
        this.status = status;
   
    }

    public String getsId() {
        return sId;
    }

    public void setsId(String sId) {
        this.sId = sId;
    }

    public int getqId() {
        return qId;
    }

    public void setqId(int qId) {
        this.qId = qId;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Choice{" +
                "sId='" + sId + '\'' +
                ", qId=" + qId +
                ", status=" + status +
                '}';
    }

}

注意点
[email protected] 表示这是一个实体类,在运行时,jpa会在数据库中自动创建一个与实体内字段对应的表。
[email protected] 表示主键,显然小编这里的sId为主键。
3.小编这里重写toString是为了拿出数据的时候更方便。
4.实体类必须要有默认的构造函数.。

补充一点

@Id
@GeneratedValue
 private String sId;

我们加上 @GeneratedValue就表示sId为一个自增长字段,也就不需要设置set方法了。

如何设置联合主键呢

首先确定你要设置的联合主键,比如小编想把sId和qId设置成一对联合组件。
主要步骤

  1. 创建一个Choice_Map主键实现类(小编这里采用随意命名法,大佬们别吐槽)Choice_Map.class必须要实现Serializable 这个接口,注意是必须要继承。
public class Choice_Map implements Serializable {
private String sId;
private int qId;

    public Choice_Map(){

    }
    public Choice_Map(String sId,int qId){
        this.qId =qId;
        this.sId =sId;

    }
    public String getsId() {
        return sId;
    }

    public void setsId(String sId) {
        this.sId = sId;
    }

    public int getqId() {
        return qId;
    }

    public void setqId(int qId) {
        this.qId = qId;
    }

}

按照小编这样写就对了哦!!!!!

2.现在我们再回到Choice这个类,要做一点点修改
修改点

  1. 增加了@IdClass(Choice_Map.class),这里就是我们刚才创建的Choice_Map要写入的地方。
  2. 在qId上面加入@Id这样联合组件就算创建好了
// An highlighted block
@Entity
@IdClass(Choice_Map.class)
public class Choice {

    //学生 id
    @Id
    private String sId;
    @Id
    private int qId;
    private Integer status;
    public Choice() {
        super();
    }

    public Choice(String sId, int qId, Integer status ) {
        this.sId = sId;
        this.qId = qId;
        this.status = status;
   
    }

    public String getsId() {
        return sId;
    }

    public void setsId(String sId) {
        this.sId = sId;
    }

    public int getqId() {
        return qId;
    }

    public void setqId(int qId) {
        this.qId = qId;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Choice{" +
                "sId='" + sId + '\'' +
                ", qId=" + qId +
                ", status=" + status +
                '}';
    }

}

超级无敌重要的地方

1.咋们Choice与Choice_Map中要设置联合主键类型一定要一致,否则无法运行成功。。。。。。。

谢谢大家支持我这个苦逼自学的大学生。