SpringBoot Data Jpa中新增數據到MySql報錯

  1. 踩坑紀錄

踩坑紀錄

SpringBoot Data Jpa中新增數據到MySql報錯

Table 'msystem.hibernate_sequence' doesn't exist

報錯原因:
因為@GeneratedValue主鍵的生成策略,若不寫的話相當於@GeneratedValue(strategy=GenerationType.AUTO),但MySql是不支持的,Oracle才支持

報錯的Entity如下:

@Data
@Entity
@Table(name = "t_employee")
public class Employee {
    @Id
    @GeneratedValue
    private int eId;
    private String eName;
    private String gender;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    private String phone;
    private String address;
}

解決方案:
將生成策略定義為IDENTITY,代碼如下:

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

擴展知識如下:

@GeneratedValue:主鍵的產生策略,通過strategy屬性指定。

  1. AUTO自動選擇一個最適合底層數據庫的主鍵生成策略。這個是默認選項,即如果只寫@GeneratedValue,等價於@GeneratedValue(strategy=GenerationType.AUTO)。 該策略為主鍵序列化,而mysql是不支持的 ,oracle支持的。所以才會報錯。
  2. IDENTITY 表自增長字段,Mysql支持的 auto increment,所以修改為此。Oracle不支持這種方式。
  3. SEQUENCE 通過序列產生主鍵,MySQL不支持這種方式。
  4. TABLE 通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易於數據庫移植。不同的JPA的實現生成的表名是不同的,Hibernate生成一個hibernate_sequences表。

轉載請注明來源,歡迎對文章中的引用來源進行考證,歡迎指出任何有錯誤或不夠清晰的表達。可以郵件至 b8954008@gmail.com