美文网首页
JPA不识别MySQL的枚举类型

JPA不识别MySQL的枚举类型

作者: JavaEdge | 来源:发表于2024-03-31 21:03 被阅读0次

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,自定义保存好取出时的数据转换,解决!

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都技术专家,多家大厂后端一线研发经验,在分布式系统、和大数据系统等方面有多年的研究和实践经验,拥有从零到一的大数据平台和基础架构研发经验,对分布式存储、数据平台架构、数据仓库等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&优惠券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

本文由博客一文多发平台 OpenWrite 发布!

相关文章

  • JPA关于枚举类型的处理

    当我们使用jpa处理枚举类型的自定义查询时,可以这么干: 将枚举的字符串形式存储到数据库中 首先在model中指定...

  • MySQL 枚举和集合

    MySQL 枚举enum和集合setenum:多选一set:多选多 枚举类型,enum一般来说就是单选,在定义枚举...

  • C语言基础 之 枚举类型

    枚举类型 枚举类型: 列出所有可能的值 枚举类型的定义 枚举类型定义的一般格式:enum 枚举类型名 {枚举值表}...

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • Mysql 更新枚举enum类型

    表定义如下: 如果要更新type,使用如下语句: 不能这么使用:

  • 枚举

    枚举 枚举就是专门用来表示几种固定类型的取值 枚举的本质就是基本数据类型,整型 枚举类型定义格式 定义枚举类型变量...

  • TS学习笔记(6)-枚举类型

    枚举类型 ========= 知识点 枚举类型的定义方法 枚举类型的使用方法 代码

  • C++11 enum class

    传统的枚举类型不是类型安全的,会被视作整数。 C++11 枚举类型是类型安全的:不能够被隐式的转换为整数,同时也不...

  • Typescript入门之:枚举

    Typescript 枚举类型 enum 数字枚举类型 会自动填充,但是初始值必须是数值或者不填(默认是0) 字符...

  • JavaScript中的Enum枚举类型数据

    一、枚举类型介绍 1、枚举类型 如果接触过其它语言或者TypeScript,大概对于枚举类型有一些了解。枚举类型是...

网友评论

      本文标题:JPA不识别MySQL的枚举类型

      本文链接:https://www.haomeiwen.com/subject/bbebtjtx.html