首页 > 数据库 >JPA不识别MySQL的枚举类型

JPA不识别MySQL的枚举类型

时间:2024-04-01 21:12:02浏览次数:14  
标签: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,自定义保存好取出时的数据转换,解决!

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

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

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

负责:

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

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

参考:

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

标签:JPA,平台,保存,枚举,MySQL,数据
From: https://www.cnblogs.com/JavaEdge/p/18109367

相关文章

  • 深入学习MySQL1——体系结构、常见引擎、索引
    MySQL体系结构连接层:提供一些mysql的数据连接对象、用户校验、权限认证等服务服务层:在本层实现了一些核心功能,如SQL接口,缓存查询(8.0之后的版本已取消该功能)、SQL分析和优化,部分内置函数的执行。所有的跨存储引擎的功能都在这一层实现,如:过程、函数等。在该层,服务器会解析查询并......
  • MySQL日常练习——多表查询
    1、创建DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL......
  • Mysql 常用SQL语句
    1、查看mysql中所有的数据库, show databases;2、创建库 createdatabase库名;(也可以用 create databaseifnotexists 库名; 表示如果库不存在再创建)例:create databaseifnotexists ecology;3、删除库 drop database 库名称4、创建一张......
  • 使用node更加方便的操作mysql数据库的小工具
    这是一个自己封装的小工具,能够更加方便的操作数据库地址:工具首页git仓库地址功能还在继续开发当中…安装npminstallmysqinfo已经引入mysql工具包,无需在项目中再次引入mysql工具包导入constdb=require('mysqinfo')获取数据库对象//db.dbconnect('m......
  • Linux 安装 Mysql(Docker)
    Linux安装Mysql以下操作在root用户下否则加上sudodockerpullmysql:5.7注意容器名字如果有-会错误dockerrun-p3306:3306--namemysql_gulishangcheng\-v/mydata/mysql/log:/var/log/mysql\-v/mydata/mysql/data:/var/lib/mysql\-v/mydata/mysql/con......
  • java计算机毕业设计(附源码)医患辅助系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,医疗健康领域正经历着前所未有的变革。传统的医患交流模式受限于时间和空间,难以满足现代社会对医疗服务效率和质量的要求。医患辅......
  • java计算机毕业设计(附源码)医疗大数据系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:医疗大数据系统是近年来在医疗领域内兴起的一个重要研究方向,它利用现代信息技术手段,对海量的医疗健康数据进行采集、存储、管理和分析,以期提供更为精准、......
  • python计算机毕设【附源码】毕业生离校系统的设计与实现(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,信息化管理已经成为了现代教育体系中不可或缺的一部分。对于高校而言,毕业生离校系统的设计与实现是提高学校管理效率、优化毕业生......
  • java计算机毕业设计(附源码)一起捞餐厅点餐和管理系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代都市的快节奏生活中,餐饮业作为人们日常消费的重要组成部分,扮演着至关重要的角色。随着科技的不断进步和消费者需求的多样化,传统的餐饮服务方式已经......
  • java计算机毕业设计(附源码)一校置之系统的开发实现(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息化时代背景下,教育行业正经历着前所未有的变革。传统的教育管理方式已无法满足现代高效、精准的管理需求。随着计算机技术和互联网的发展,一校置之系......