JPA不识别MySQL的枚举类型

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

1 枚举好用吗?

数据字典型字段,枚举比Integer好:

  • 限定值,只能赋值枚举的那几个实例,不能像Integer随便输,生存和查询的时候特别有用
  • 寄义明白,利用时不必要去查数据字典
  • 显示值跟存储值直接映射,不必要手动转换,比如1在页面上显示为启用,0显示禁用,枚举定义好可以直接显示
  • 基于enum可以添加一些拓展方法
但默认
2  JPA不识别MySQL 的 enum 类型

会报错:
  1. Cannot determine value type from string 'waiting'"
复制代码
需添加指定注解,如:
  1. @Enumerated(EnumType.ORDINAL)
  2. @Column(name = "STATUS")
  3. 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,自定义生存好取出时的数据转换,办理!
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都技能专家,多家大厂后端一线研发经验,在分布式系统、和大数据系统等方面有多年的研究和实践经验,拥有从零到一的大数据平台和基础架构研发经验,对分布式存储、数据平台架构、数据仓库等领域都有丰富实践经验。
各大技能社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和办理方案的积累。
负责:

  • 中心/分销预订系统性能优化
  • 运动&优惠券等营销中台建立
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
现在主攻低落软件复杂性设计、构建高可用系统方向。
参考:
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表