注解@Enumerated
@Enumerated
@Enumerated 是JDK中 javax.persistence 包下的注解,用在持久化实体类属性或字段上,表示该属性或字段应该按照枚举类型 Enum 来持久化。例如:
1 | public enum Gender { |
1 |
|
属性或字段按照枚举类型来持久化时,可以分为两种情况:原始类型和字符串类型。
枚举持久化类型可以在 javax.persistence.EnumType 类中找到,其中 ORDINAL 表示原始类型;STRING 表示字符串类型。例如字符串类型的写法如下:
1 |
|
如果没有特别指定类型,枚举属性或字段默认按照 ORDINAL 来持久化。
1. 原始类型
ORDINAL 表示将枚举类按照其原始类型,也就是整数,来持久化。比如:
1 |
|
如果按照上述的代码执行,枚举字段 gender 将被转成数据库的整型字段(以Mysql为例):
1 | JAVA <---> Mysql |
也就是当 Person 对象被持久化到数据库时,枚举字段 gender 的值将按照其整数值来保存。
1 | Gender <---> Mysql |
2. 字符串类型
STRING 表示将枚举类按照字符串类型持久化。
1 |
|
如果按照上述的代码执行,枚举字段 gender 将被转成数据库的字符串字段(以Mysql为例):
1 | JAVA <---> Mysql |
当 Person 对象被持久化到数据库时,枚举字段 gender 的值不再按照原始整数来保存,而是将按照其字符串值来保存。
1 | Gender <---> Mysql |
3. 总结
总的来说,@Enumerated 注解是用来标识枚举字段是按照什么方式来持久化的,也就是保存到数据库的数据类型:
@Enumerated(EnumType.ORDINAL)就是保存枚举字段的的整数值(序号);@Enumerated(EnumType.STRING)就是保存枚举字段的字符串值。
另外,不指定类型的 @Enumerated 等于 @Enumerated(EnumType.ORDINAL) 。
注解@Enumerated