踩坑紀錄
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屬性指定。
- AUTO自動選擇一個最適合底層數據庫的主鍵生成策略。這個是默認選項,即如果只寫@GeneratedValue,等價於@GeneratedValue(strategy=GenerationType.AUTO)。 該策略為主鍵序列化,而mysql是不支持的 ,oracle支持的。所以才會報錯。
- IDENTITY 表自增長字段,Mysql支持的 auto increment,所以修改為此。Oracle不支持這種方式。
- SEQUENCE 通過序列產生主鍵,MySQL不支持這種方式。
- TABLE 通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易於數據庫移植。不同的JPA的實現生成的表名是不同的,Hibernate生成一個hibernate_sequences表。
轉載請注明來源,歡迎對文章中的引用來源進行考證,歡迎指出任何有錯誤或不夠清晰的表達。可以郵件至 b8954008@gmail.com