在javax.persistence包中有这么两个注解@Enumerated,@EnumType

@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Enumerated {/** (Optional) The type used in mapping an enum type. */EnumType value() default ORDINAL;
}
public enum EnumType {/** 持久枚举类型字段为整数,元素一般从0开始索引. */ORDINAL,/** 持久枚举类型为字符串. */STRING
}

当我需要持久化一个枚举类字段的时候,就可以用@Enumerated来标注枚举类型。来举个栗子:

数据库中有一张employee表

对应的Employee实体

@Entity
@Table(name = "employee", schema = "public")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Employee {@Id@GeneratedValue@Column(name = "id")private Long id;@Column(name = "name")private String name;@Column(name = "sex")@Enumerated(EnumType.ORDINAL)//性别字段持久化为0,1private Sex sex;@Column(name = "type")@Enumerated(EnumType.STRING)//枚举字符串private Type type;
}

Sex枚举类:

public enum Sex {MAIL("男"),FMAIL("女");private String value;private Sex(String value) {this.value = value;}
}

Type枚举类:

public enum Type {PROGRAMMER("开发"),PM("项目经理"),TESTERS("测试"),UI("妹子"),;private String type;private Type(String type) {}
}

那现在我们来看一下插入几条数据看下是什么效果。

EmployeeRepostory employeeRepostory = context.getBean(EmployeeRepostory.class);Employee fireYao = Employee.builder().name("fireYao").sex(Sex.MAIL).type(Type.PROGRAMMER).build();Employee gakki = Employee.builder().name("gakki").sex(Sex.FMAIL).type(Type.UI).build();Employee whoever = Employee.builder().name("whoever").sex(Sex.FMAIL).type(Type.PM).build();employeeRepostory.save(Arrays.asList(fireYao,gakki,whoever));

插入数据后,数据库中:

可以看到,sex字段被持久化为0,1这样的int字段,因为在sex字段上标注了@Enumerated(EnumType.ORDINAL),那这样持久化到数据库时,就会根据枚举类中的字段,依次从0开始标记,Sex中MAIL(“男”)就为0,FMAIL(“女”)就为1依次增加。
在type字段上标注了@Enumerated(EnumType.STRING),就直接根据枚举类的字段字符串来自动持久化到数据库。
如果枚举字段上不加注解,那么枚举字段就会被默认映射为 int 类型存储。
那现在我们来看查询一下的结果。

List<Employee> all = employeeRepostory.findAll();


可以看到,查询出来的结果中sex字段又自动还原成了Sex枚举字段。

from: https://juejin.im/post/59dedd0b51882578ba156161

@Enumerated相关推荐

  1. 你需要的大概不是 enumerated

    作者:KHANLOU,原文链接,原文日期:2017-03-28 译者:四娘:校对:Cwift:定稿:CMB Swift 标准库里最容易被滥用的就是 Sequence 的 enumerated() 函数 ...

  2. 浅析枚举类型(Enumerated types)

    枚举类型定义了一系列有序值的集合.枚举变量就是从这个既定的集合中取某个值.集合中的有序值可以称为元素,元素一般从0开始索引(也就是元素的顺序号). 定义一个枚举类型,采用以下的格式: type typ ...

  3. Hibernate注解之@Enumerated

    @Enumerated(value=EnumType.ORDINAL)采用枚举类型的序号值与数据库进行交互, 此时数据库的数据类型需要是数值类型,例如在实际操作中 CatTest ct = new C ...

  4. @Enumerated的使用

    前言 今天做测试,发现还没有试过实体类中关于枚举项的使用,于是就做了个测试,发现了点问题(发现的问题主要是针对我使用的ORM框架是Ebean,它自带了一个比@Enumerated更好用的注解和方式). ...

  5. was mutated while being enumerated.

    又一次写验证码demo的时候,一下代码carsh了 [self.qBgView.layer.sublayers enumerateObjectsUsingBlock:^(CALayer * _Nonn ...

  6. STM8L在IAR编译时出现Warning[Pe188]: enumerated type mixed with another type F:\STM8Ldemo\Bsp\bsp警告处理

    串口配置时出现以下警告:Warning[Pe188]: enumerated type mixed with another type F:\STM8Ldemo\Bsp\bsp 处理方法:如果你USA ...

  7. iPhone开发-- 崩溃之 Collection was mutated while being enumerated.的三种解决办法

    崩溃提示 崩溃提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection &l ...

  8. C ++基础 | sizeof函数(endl 和 \ n),定义常量(Define Constants),枚举常量(Enumerated Constants)_2

    目录 sizeof函数(endl 和 "\ n") 定义常量 枚举常量 sizeof函数(endl 和 "\ n") 与其他编程语言一样,在内存中分配变量的大小 ...

  9. Collection __NSArrayM: 0xxxxxxx was mutated while being enumerated.

    在遍历时,又操作NSArray或者NSMutableArray,会出现这个错误. NSMutableArray * array = xxx;   for (NSDictionary * dic in  ...

  10. 《Java SE实战指南》06-08:枚举类型(Enumerated types)

    内容导航: 前言 1.定义 2.使用场景 3.高阶应用 前言 在现实场景中,我们发现某类事物包含的名称.范围和含义是有限的,都可以列举出来. 方向:北.南.东.西: 季节:春季.夏季.秋季.冬季: 月 ...

最新文章

  1. Windows之建立C++开发环境
  2. Java高级开发工程师面试笔记
  3. 简述分布式一致性协议(2pc、3pc、paxos、zab)
  4. 使用MVC模式制作游戏-教程和简介
  5. RFIC4463_F3CD
  6. RS特性总结(思维导图)
  7. 纠错码与魔术(一)——纠错码与汉明码简介
  8. 奶爸日记2 - 鑫鑫感动了婆婆
  9. php配置 验证码无法显示,PHP验证码无法显示的原因及解决办法
  10. R语言编程环境的安装和运行
  11. TCP/IP协议簇中的子网掩码有什么作用
  12. Cesi运行报错AttributeError: can‘t set attribute
  13. 好的设计的10个原则
  14. 网络打印机安装和设置技巧
  15. Windows 2003安全设置大全----2003系统错误大全解释
  16. 智能音箱场景下的性能优化
  17. 路由器fast服务器没响应,FAST路由器复位常见问题解决方法
  18. 少儿编程 | 探讨C++课程、MIT Scratch课程、python课程、Noi竞赛、蓝桥怎么引导?如何才能让小孩子飞的更高?附开发工具的下载与安装
  19. 微信群机器人助手多群同步群发消息,管理100个微信群!
  20. 【从头到脚】前端实现多人视频聊天— WebRTC 实战(多人篇)

热门文章

  1. CC2430 CC2530 AD转换分辨率之“争”
  2. 锐炬显卡和独立显卡有什么不同?
  3. C#语言自定义平方根函数
  4. 修复Word打开文档默认显示两页的问题
  5. 安装Ubuntu后必须要做的几件事(一)--基础应用篇
  6. [歌词]《一花依世界》《君がいる世界へ》歌词假名罗马音
  7. appium +夜神模拟器 java代码sendkeys 无法在模拟器输入中文
  8. 团队分享心得体会_团队合作心得体会总结
  9. Centos 7 开机提示 Entering emergency mode 解决方法
  10. 【数据结构】【范浩强Treap】CF702F T-shirt