Spring Data JPA自动生成表时列顺序混乱的解决办法(最新版)

news/2025/3/11 15:45:33/文章来源:https://www.cnblogs.com/didispace/p/18572113

最近把Spring Boot的版本升级到了3.3.5,突然发现一个问题:当使用Spring Data JPA自动生成表的时候,所产生的列顺序与Entity类中的变量顺序不一致了。比如,有一个下面这样的Entity:

@Data
@Entity(name = "t_config")
@EntityListeners(AuditingEntityListener.class)
public class Config {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(length = 20)private String itemKey;@Column(length = 200)private String itemValue;@Column(length = 200)private String itemDesc;@CreatedDateprivate Date createTime;@LastModifiedDateprivate Date modifyTime;}

实际自动创建出来的是这样的:

自动创建的表结构中各个列与Entity类中的变量顺序不一致。其实该问题是一个老生常谈的问题了,在DD这次升级的工程里是有做过解决方案的。只是升级了Spring Boot版本之后,之前的解决方案失效了。

搜索了一番,同时还问了一下AI,发现给出的方案还都是老的解决方案,所以今天特别写一篇来记录下新版本之下,要如何解决这个问题。如果您刚好遇到类似的问题,可以参考本文来解决。

老版本解决方案

新老版本的解决思路是类似的,都是替换Hibernate的实现,下面是老版本的解决步骤:

  1. 在工程中新建org.hibernate.cfg
  2. 找到hibernate-core包下的org.hibernate.cfg下的PropertyContainer类,复制到本工程的org.hibernate.cfg包下
  3. PropertyContainer类中定义的persistentAttributeMap类型从TreeMap修改为LinkedHashMap

新版本解决方案

虽然之前的方案失效了,但思路应该还是对的,所以第一反应是看看当前版本下的PropertyContainer类,具体如下(省略了一些不重要的内容):

package org.hibernate.boot.model.internal;//省略...public class PropertyContainer {private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, PropertyContainer.class.getName());/*** The class for which this container is created.*/private final XClass xClass;private final XClass entityAtStake;/*** Holds the AccessType indicated for use at the class/container-level for cases where persistent attribute* did not specify.*/private final AccessType classLevelAccessType;private final List<XProperty> persistentAttributes;//省略...}

可以看到有两个重要变化部分:

  1. PropertyContainer类的包名从org.hibernate.cfg改到了org.hibernate.boot.model.internal
  2. 之前的TreeMap<String XProperty> persistentAttributeMap变量没有了,但多了一个List<XProperty> persistentAttributes。进一步观察这个新变量的处理过程,可以看到如下逻辑:

所以,新版的方案就以下两个步骤:

  1. 在工程中新建org.hibernate.boot.model.internal
  2. 找到hibernate-core包下的org.hibernate.boot.model.internal下的PropertyContainer类,复制到本工程的org.hibernate.boot.model.internal包下
  3. PropertyContainer类中,上面图中红色圈出部门定义的localAttributeMap = new TreeMap<>();修改为localAttributeMap = new LinkedHashMap<>();

到这里,在新版本中的这个问题就解决了。如果你也遇到了类似的问题,希望本文对你有所帮助。另外,欢迎加入我们的Spring技术交流群,参与交流与讨论,更好的学习与进步!

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/842225.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器为什么要托管,放在自己公司不行吗?

#服务器#服务器托管是指将服务器设备交由专业的数据中心或托管服务商进行管理和维护,而不是放在自己公司内部。因为放在公司的话,公司自行管理服务器在技术支持、成本投入、安全与稳定性以及扩展性等方面都会存在一定挑战和限制:专业技术支持与维护的挑战公司自行管理服务器…

【小米微电机 CyberGear】 拆解

拆开非转轴输出侧的封盖,露出PCBA。PCBA细节图主控应该是GD32F303RET6,接口时AMASS的XT30(2+2)。 拆下固定PCB的螺丝,可以看到里面的线圈背面细节图:

creo装配状态保存

装配体移动位置后,需要在层中保存状态,不然creo打开装配体后会是未操作之前的状态

calico安装下载

k8s网络插件 1、版本选择 cacli版本对应关系查找。参考:https://blog.csdn.net/LRXmrlirixing/article/details/126648454https://docs.tigera.io/archive/v3.10/getting-started/kubernetes/requirements 本次安装的的k8s版本是v1.14.3,所以可以使用calico v3.10版本。 同样…

【网络安全】Shell 脚本学习

声明:学习视频来自 b 站 up 主 泷羽 sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 脚本创建执行与变量使用 首先进入Linux终端【Windows系统…

phpMyAdmin管理mysql

记录时间:2024-11-27 创建数据库 修改和删除数据库 创建数据表 翻译 搜索 复制

如何克服拖延症?一款工具就能帮你搞定!

拖延症的深层原因:并不是“懒”这么简单 很多人以为拖延症是一种惰性,但实际上,拖延更像是一种心理反应,尤其在职场中,以下几个原因尤为常见:任务过于庞大,难以启动当一个任务看起来复杂且耗时时,大脑会倾向于逃避。我们会反复告诉自己“等一下再开始”,结果一直拖到最…

2024年项目管理软件热搜榜,竟然有这16款黑马工具!

一、项目管理软件的重要性在当今复杂多变的商业环境中,项目管理软件成为提升项目效率和质量的关键工具,能帮助团队在规划、协作、进度监控和知识积累等方面取得显著提升。 在快节奏的商业时代,企业面临着激烈的市场竞争和不断变化的客户需求。项目管理软件就如同企业在这场竞…

jmeter测试udp接口详解

jmeter测试udp广播(jmeter发送udp) jmeter测试udp广播(jmeter接收udp) 先下载安装第三方插件 下载链接:https://jmeter-plugins.org/install/Install/ 将下载的插件放在lib/ext目录里面 然后重启jmeter,如下图操作: 此时可以看到lib/ext目录里面多了一个插件: jmeter-p…

无循环无卷积!上海交大提出时空预测学习新里程碑PredFormer

前言 时空预测,真的需要 RNN 吗?真的需要 CNN 吗?是否能够设计一个模型,可以自动地学习数据中的时空依赖,而不需要依赖于归纳偏置呢? 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。 本文转载自PaperWeekly 仅用于学术…

NeurIPS2024 | 提高专业生产力,让你的AI画作布局可控,360 AI Research开源新模型HiCo

前言 为了解决这一问题,360人工智能研究院在人工智能顶会NeurIPS2024上提出了布局可控AI绘画模型HiCo,并将于近期开源。基于HiCo模型,使用者可以对生成画面中的不同主体的布局进行自由控制和调整,实现“指哪打哪”的生成效果。 欢迎关注公众号CV技术指南,专注于计算机视觉…

【开源系列】Faraday : 渗透测试 IDE 和漏洞管理平台

什么是 Faraday ? Faraday 是一个开源的漏洞管理平台,它旨在帮助安全团队有效地管理和协作处理漏洞。Faraday 提供了一个集中的平台,用于收集、分析和报告漏洞信息。它支持多种集成,可以与各种安全工具和扫描器无缝对接,从而提高漏洞管理的效率和准确性。 Faraday 的功能特…