Hibernate 枚举类型@Enumerated(EnumType.STRING)的应用
目的:希望通过枚举,以String形式与数据库对应字段传递,遇到了一些报错,在网上的解决方法大多都解决不了
案发现场(一开始的写法):
报错:,查询的时候数据库的值识别不了,没法赋值给实体类
代码:
/*** 设备标识.equipment*/@Getter@Setter@Size(max = 128)@NotNull@Comment("设备标识,")@Column(name = "equipment" , length = 128 , nullable = false)@Enumerated(EnumType.STRING)private EquipmentType equipment;
/*** 枚举:服务器类型* */public enum EquipmentType {/** 0-切片服务器 */SECTIONS(0, "切片服务器"),/** 1-其他服务器 */OTHER(1, "其他服务器");/** 值 */private Integer value;private String label;/** 取值 */public String getLabel() { return label; }public Integer getValue() { return this.value; }EquipmentType(Integer value, String label) {this.value = value;this.label = label;}}
分析:
误认为使用了@Enumerated(EnumType.STRING)注解,就相当于分配上面的 label(枚举第二个参数)与数据库交互,在这折腾了好久,其实并非这样。
EnumType源码如下:
枚举类型默认是按他的索引跟数据库关联,也可以指定说他的 value(枚举第一个参数),即第一种ORDINAL(索引)。
第二种是以枚举的value值跟数据库关联,如上面的实体类的SECTION、OTHER
总结:
也就要么存的是它的索引,即ordinal,要么是value值,如SECTION、OTHER
于是枚举代码改成:
/*** 枚举:服务器类型* */public enum EquipmentType {/** 0-切片服务器 */切片服务器(0, "切片服务器"),/** 1-其他服务器 */其他服务器(1, "其他服务器");/** 值 */private Integer value;private String label;/** 取值 */public String getLabel() { return label; }public Integer getValue() { return this.value; }EquipmentType(Integer value, String label) {this.value = value;this.label = label;}}
这样实体类和数据库关联起来
遇到的报错:
解决:去掉size的限定
/*** 设备标识.equipment*/@Getter@Setter@NotNull@Comment("设备标识,")@Column(name = "equipment" , nullable = false)@Enumerated(EnumType.STRING)private EquipmentType equipment;
Hibernate 枚举类型@Enumerated(EnumType.STRING)的应用相关推荐
- C++_布尔类型、枚举类型
布尔类型 ================================================== 布尔类型对象可以被赋予文字值true或false. 当表达式需要一个算术值的时候,布尔对 ...
- 枚举类型和各种类型之间转换
//声明枚举public enum Sesons{春,夏,秋,冬}static void Main(string[] args){Sesons s = Sesons.春;string str=&quo ...
- enum枚举类型用法
文章目录 1. 枚举类型和枚举变量 1.1 枚举类型的定义和声明 1.2 枚举变量的定义和声明 2. 枚举变量和枚举常量的关联对应 3. 枚举类型和变量的应用 3.1 作为判断语句中的逻辑 3.2 一 ...
- C#的枚举数(Enumerator)和可枚举类型(Enumerable)
数组可以被foreach语句遍历数组中的元素,原因是数组可以按需提供一个叫做枚举数(enumerator)的对象.枚举数可以依次返回请求的数组的元素. 对于有枚举数的类型而言,必须有一个方法来获取它们 ...
- 浅析枚举类型(Enumerated types)
枚举类型定义了一系列有序值的集合.枚举变量就是从这个既定的集合中取某个值.集合中的有序值可以称为元素,元素一般从0开始索引(也就是元素的顺序号). 定义一个枚举类型,采用以下的格式: type typ ...
- 运用String.format格式化方法和消息枚举类型创建消息模板
package com.han.StringFormat;import java.util.Date;/*** 运用String.format格式化方法和消息枚举类型创建消息模板* * @author ...
- 《Java SE实战指南》06-08:枚举类型(Enumerated types)
内容导航: 前言 1.定义 2.使用场景 3.高阶应用 前言 在现实场景中,我们发现某类事物包含的名称.范围和含义是有限的,都可以列举出来. 方向:北.南.东.西: 季节:春季.夏季.秋季.冬季: 月 ...
- Hibernate注解之@Enumerated
@Enumerated(value=EnumType.ORDINAL)采用枚举类型的序号值与数据库进行交互, 此时数据库的数据类型需要是数值类型,例如在实际操作中 CatTest ct = new C ...
- thinking-in-java(19)枚举类型
[0]开场白 1)关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用: 2)所有的枚举类都继承自 Enum,通过 enumClass.getSu ...
- 求你了,不要再在对外接口中使用枚举类型了!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛 ...
最新文章
- Apache URL重定向避免网址结尾斜线问题
- 【ACM】【STL】stack应用
- 实现-驼峰和下划线的转换 工具类
- python动物代码大全_python爬虫代码大全
- python如何爬虫eps数据_Python爬虫常用的几种数据保存方式
- 4比较三个数的大小输出最大的值并从小到大排序输出
- OpenGL基础56:OpenGL简单调试
- solr中facet及facet.pivot理解
- SyncBird Pro的PhoneCare功能如何使用
- 谷歌在招什么样的人?
- 使用adb工具修改android分辨率
- 卸载office 2016 报错:错误1321
- 第1卦 乾为天(乾卦) 刚健中正 上上卦
- 速通C语言支线第一站 基础刷题
- python3 实现火车票查询 代码+知识点
- snprintf() 函数
- NB-IoT设备并发错峰及优化方法
- html 二级页面 教程,css 实现动态二级菜单
- Pytorch版本YOLOv3模型转Darknet weights模型然后转caffemodel再转wk模型在nnie上面推理
- POJ 2656 Unhappy Jinjin(水~)
热门文章
- ROS使用节点句柄nh(“~“)和nh的区别:发布的话题的命名空间不同
- 网络打印机 这台计算机上没有安装,Win7添加网络打印机时提示打印处理器不存在怎么办?...
- 《学习网站》计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- js表单提交enter触发提交
- 某互联网大厂亿级大数据服务平台的建设和实践
- caj格式的文档怎么转成pdf格式呢?
- 无缘无故,谷歌浏览器主页被篡改为360导航,如何解决?
- 好未来表格识别大赛 | 获奖名单新鲜出炉!
- 小程序汉字转码以及倒计时
- ArcMap进行标记符号制作