@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