@Enumerated用於標註枚舉字段,對應mysql的enum類型
-
源碼支持兩種類型
package javax.persistence; public enum EnumType { ORDINAL,//按照枚舉的下標,使用Enum類型實例在Enum中聲明的順序,通過這個序號來將Enum類型字段映射成int類型來存儲; STRING;//按照枚舉的名字,使用Enum類型實例中的name屬性來完成映射,將Enum類型映射成字符串的方式 private EnumType() { } }
-
默認情況
當不使用任何註解的時候,默認情況下是使用
ordinal
屬性,序號是從0開始的 -
ORDINAL例子
3.1 定義一個Enum類
public enum Gender { MALE, FEMALE }
3.2 定義一個Entity
@Data//自動生成get和set方法 @Entity public class Person{ @Id @GeneratedValue private Long id; @Column(nullable = false) private String name; @Column private Gender gender; public Person(String name, Gender gender){ this.name = name; this.gender = gender; } }
3.3 數據庫中表結構
Enum類型字段Gender被映射成int(11)類型3.4 插入數據
@Test public void insert_data_into_person(){ personService.save(new Person("Tom", Gender.MALE)); personService.save(new Person("Joy", Gender.FEMALE)); }
3.5 查看數據庫中的插入結果
表中Gender.MALE對應的序號是0,Gender.FEMALE對應的序號是1 -
STRING的例子
4.1 定義一個Enum類
public enum Gender { MALE, FEMALE }
4.2 一個Entity
@Data//自動生成get和set方法 @Entity public class Person{ @Id @GeneratedValue private Long id; @Column(nullable = false) private String name; @Column @Enumerated(EnumType.STRING) private Gender gender; public Person(String name, Gender gender){ this.name = name; this.gender = gender; } }
4.3 數據庫中表結構
Enum類型字段Gender被映射成VARCHAR(255)類型4.4 插入數據
@Test public void insert_data_into_person(){ personService.save(new Person("Tom", Gender.MALE)); personService.save(new Person("Joy", Gender.FEMALE)); }
4.5 查看數據庫中的插入結果
表中Gender.MALE對應的就是MALE,Gender.FEMALE對應的就是FEMALE