JPA不识别MySQL的枚举类型
2024/4/1 23:02:29
本文主要是介绍JPA不识别MySQL的枚举类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 枚举好用吗?
数据字典型字段,枚举比Integer好:
- 限定值,只能赋值枚举的那几个实例,不能像Integer随便输,保存和查询的时候特别有用
- 含义明确,使用时不需要去查数据字典
- 显示值跟存储值直接映射,不需要手动转换,比如1在页面上显示为启用,0显示禁用,枚举定义好可以直接显示
- 基于enum可以添加一些拓展方法
但默认
2 JPA不识别MySQL 的 enum 类型
会报错:
Cannot determine value type from string 'waiting'"
需添加指定注解,如:
@Enumerated(EnumType.ORDINAL) @Column(name = "STATUS") private StatusEnum status;
Enumerated提供两种
3 持久化枚举
3.1 EnumType.ORDINAL
按枚举的顺序保存数字。缺点:
顺序性
java枚举的顺序从0开始递增,没法自己指定,我有些枚举并不是从0开始的,或者不是+1递增的,比如一些行业的标准代码。
旧数据可能不兼容
如-1代表删除,映射不了。
不健壮
项目那么多人开发,保不准一个猪队友往枚举中间加了一个值,那完了,数据库里的记录就要对不上了。数据错误没有异常,发现和排查比较困难。
3.2 EnumType.STRING
保存枚举的值,即toString()的值。
也有局限性:
- String类型,数据库定义int,即使override toString方法返回数字的String,JPA也保存不了
- 同样不适用旧数据,旧数据是int
- 不能改名,改了后数据库的记录映射不了
我对枚举需求其实很简单:
- 保存int型
- 值可自己指定
可惜默认的那两种都实现不了。
没法,只能考虑在保存和取出的时候自己转换,找到实体转换器AttributeConverter,自定义保存好取出时的数据转换,解决!
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都技术专家,多家大厂后端一线研发经验,在分布式系统、和大数据系统等方面有多年的研究和实践经验,拥有从零到一的大数据平台和基础架构研发经验,对分布式存储、数据平台架构、数据仓库等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&优惠券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
目前主攻降低软件复杂性设计、构建高可用系统方向。
参考:
- 编程严选网
这篇关于JPA不识别MySQL的枚举类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南
- 2024-12-07MySQL慢查询入门:快速掌握性能优化技巧
- 2024-12-07MySQL入门:新手必读的简单教程
- 2024-12-07MySQL入门:从零开始学习MySQL数据库
- 2024-12-07MySQL索引入门:新手快速掌握MySQL索引技巧
- 2024-12-06BinLog学习:MySQL数据库BinLog入门教程
- 2024-12-06Binlog学习:MySQL数据库的日志管理入门教程