天天看点

Spring boot如何设置联合主键

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中要设置联合主键类型一定要一致,否则无法运行成功。。。。。。。

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

继续阅读