JPA在ddl-auto=update时,首次执行报错Cant DROP; check that column/key exists

2023-11-02

背景

在一个新的数据库上启动项目,报了一堆Can't DROP xxx; check that column/key exists的错误,虽然不影响系统正常启动,也不影响建表,但是影响心情。因此上网查询原因,发现大部分都没提到这个问题,要么就是顾左右而言他,回答不在点上。没办法,只好自己看源码。

原理

抽象数据库结构移植器(AbstractSchemaMigrator)在处理uniqueKeys(applyUniqueKeys)的时候,使用到三种策略,分别为先删后建静悄悄(DROP_RECREATE_QUIETLY)策略、只建不删静悄悄(RECREATE_QUIETLY)策略和啥都不做(SKIP)策略。

首先必须吐槽一下这个静悄悄处理,仅仅是做了一个tryCatch,然后做了忽略,但是没有想到错误的底层自己也有一套print策略,仍然将异常打印了出来(LogFilter中的isStatementLogErrorEnabled判断),所以根本不是彻底的静悄悄嘛。

其次来说一说这个默认使用的策略DROP_RECREATE_QUIETLY,主要是靠exporter.getSqlDropStrings创建的DROP的Sql,我们发现其默认使用的exporter的标准实现StandardUniqueKeyExporter创建出来的就是一条非常标准的DROP语句,类似于alter table xxx drop index yyy,当然会在yyy不存在时报错了

Workaround

初步可以考虑重写exporter,替代默认的StandardUniqueKeyExporter实现。有时间再来贴代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA在ddl-auto=update时,首次执行报错Cant DROP; check that column/key exists 的相关文章

随机推荐

  • 【PendingIntent FLAG_MUTABLE 和 FLAG_MUTABLE的区别】

    最近在获通过NfcAdapter aenableForegroundDispatch发现不能正确调度使用android nfc 后来发现是Adnroid12以后PendingIntent的新特性导致 在代码中使用的是PendingInten
  • 浪涌防护器件特点与选型

    常用浪涌防护器件包括气体放电管 压敏电阻 TVS TSS OVP等 气体放电管 1 特点 a 响应速度慢微秒级 b 通流量最大 电压动作精度低 有续流现象 c 寄生电容最小 漏电流小 有一定残压 d 失效模型开路 老化失效 2 使用场景 体
  • 手把手教你搭建使用NuGet私有源

    文章目录 前言 Who 什么是NuGet Why 为什么用NuGet How 怎么使用NuGet 搭建Nuget私有源 打包Nuget包 发布到私有源 不开启密钥验证 开启密钥验证 测试 总结 前言 相信写过 net的小伙伴应该都用过NuG
  • 时序动作定位

    ActivityNet 下载地址 https github com UCASUSTC ActivityNet Dataset Download 目前最大的数据库 同样包含分类和检测两个任务 数据集地址为Activity Net 这个数据集仅
  • ASCII表

    http office microsoft com zh cn assistance HA011331362052 aspx ASCII 打印字符 数字 32 126 分配给了能在键盘上找到的字符 当您查看或打印文档时就会出现 数字 127
  • 软件测试大赛之移动测试练习题-全能计算器

    1 环境准备 确保以下环境全部开启 1 1 查看设备是否连接成功 以管理员运行cmd窗口 输入adb devices 1 2 开启UI Automator Viewer 通常都在tools文件夹下面的bin目录 点击 开启成功 1 3 ap
  • Qt 程序不重启实现自动翻译 -- 多语言切换

    在做应用程序的过程中 多语言的切换是必不可少的功能 今天看一看怎么用Qt自带的翻译类 QTranslator 进行多语言之间的无缝切换 并且不会重启程序 首先我们看下实现效果 1 传统的设置语言的方法 Qt的语言翻译主要是针对使用 Qtde
  • Maven环境变量的配置(详细教程)

    一 下载Maven 1 浏览器搜索 2 官网Maven 不要进错哟 3 4 5 下载完成后 解压放入创建一个新的文件夹下 路径不要有中文和空格 二 环境变量配置 1 点击我的电脑 gt 属性 gt 高级环境变量配置 2 新增加两条 M2 H
  • python 求2的倍数

    if n 2 0
  • 如何做好软件项目策划

    作为一个刚刚入门的程序员 当接到一个新的项目时 我往往会有一筹莫展的感觉 不知道如何去下手 设计数据库 设计程序结构 设计功能结构 设计用户权限 预留功能扩展等等 当想不出东西的时候 我的做法是 先静一静 好好捋一捋 假如说我要盖个房子 那
  • 浅谈LOG日志的写法

    文章来源于公司的大牛 1 Log的用途 不管是使用何种编程语言 日志输出几乎无处不再 总结起来 日志大致有以下几种用途 l 问题追踪 通过日志不仅仅包括我们程序的一些bug 也可以在安装配置时 通过日志可以发现问题 l 状态监控 通过实时分
  • Http传输协议介绍

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol 超文本传输协议 的缩写 是用于从万维网 WWW World Wide Web 服务器传输超文本到本地浏览器的传送协议 HTTP是一个基于TCP IP通信协
  • mes管理系统php原码,MES系统_MES车间管理系统_轻量化定制方案

    信息化管理系统介绍 依据信息化管理目标不同 企业信息化系统的内容差异较大 一般地 企业信息化系统由以下三个主要层次组成 各层次中包含有用途各异 功能各异的业务处理子系统或功能组件 包括企业经营管理系统 过程管理系统 过程控制系统 信息化管理
  • 微软Hololens 2开发指南

    微软Hololens 2开发指南 1 首先来介绍一下这款混合现实MR产品 这是微软在2019年向市场发布的 内部拥有win10系统 很方便用户操作 而且手势简单易上手 相较于第一代产品来说整体提升了不少 结构上解决了第一代压鼻梁的问题 这次
  • mobile footer nav

    item 数量可变 图片可变 高亮颜色可变 tabbar vue
  • stable diffusion webui升级bug问题解决思路(纯干货)

    个人网站 https tianfeng space 文章目录 一 前言 二 个人方案 1 扼杀在萌芽中 A 解压后点击启动器运行依赖 然后点击A启动器 B 更新本体和扩展 全部到最新版本 C 把controlnet1 1放入stable d
  • 由React Router引起的组件重复渲染谈Route的使用姿势

    React Router 4 把Route当作普通的React组件 可以在任意组件内使用Route 而不再像之前的版本那样 必须在一个地方集中定义所有的Route 因此 使用React Router 4 的项目中 经常会有Route和其他组
  • VMware虚拟机搭建 ESXI-8.0环境并且安装Mac OS13系统,

    官方下载地址 https customerconnect vmware com en evalcenter p free esxi8 下载完成大小如下 打开VMware虚拟机 新建虚拟机 导入镜像 选择下载VMware VMvisor In
  • Alibaba Arthas 3.1.1版本:trace支持行号/小幅改进

    Arthas是Alibaba开源的Java诊断工具 深受开发者喜爱 Github https github com alibaba arthas 文档 https alibaba github io arthas Arthas 3 1 1版
  • JPA在ddl-auto=update时,首次执行报错Cant DROP; check that column/key exists

    背景 在一个新的数据库上启动项目 报了一堆Can t DROP xxx check that column key exists的错误 虽然不影响系统正常启动 也不影响建表 但是影响心情 因此上网查询原因 发现大部分都没提到这个问题 要么就