org.h2.jdbc.JdbcSQLException:未找到列“ID”

2023-12-19

我的代码中有以下 DDL:

CREATE TABLE IF NOT EXISTS SOMETABLE (
  id BIGINT AUTO_INCREMENT NOT NULL,
  ...
  FOREIGN KEY (id) REFERENCES OTHERTABLE(id)
  ...
);

这是 OTHERTABLE 的定义:

create table "OTHERTABLE" (
  "id" BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,
  "code" VARCHAR NOT NULL,
  "name" VARCHAR NOT NULL,
  "enabled" BOOLEAN NOT NULL,
  "app_id" VARCHAR NOT NULL);

请注意,OTHERTABLE 是由 SLICK(Scala ORM Stack)自动生成的!

这适用于 MySQL(这是我们的开发/产品数据库),但是,我们的单元测试使用 H2 数据库,执行此操作会给出以下堆栈跟踪:

org.h2.jdbc.JdbcSQLException: Column "ID" not found
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:169)
at org.h2.message.DbException.get(DbException.java:146)
at org.h2.table.Table.getColumn(Table.java:613)
at org.h2.table.IndexColumn.mapColumns(IndexColumn.java:75)
at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:203)
at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:70)
at org.h2.command.ddl.CreateTable.update(CreateTable.java:169)
at org.h2.command.CommandContainer.update(CommandContainer.java:79)
at org.h2.command.Command.executeUpdate(Command.java:235)

有一种方法可以解决这个问题,那就是在所有地方将 id 更改为“id”,但是这种更改会破坏 MySQL!

由于 MySQL 是我们的产品数据库,我别无选择,只能忽略单元测试!

H2数据库方面有解决方案吗?

Thanks


如果您引用该专栏id创建时OTHERTABLE使用双引号 ("id"),那么在创建引用完整性约束和查询数据时也必须引用它。基本上,你每次都必须引用它。我建议not创建表时引用它,因为这样您以后就不必引用它。引用意味着标识符区分大小写。对于 MySQL,它之所以有效,是因为 MySQL 在内部将不带引号的标识符转换为小写,这与其他数据库不同。但对于H2和其他数据库它不起作用。

以下两条语句适用于 MySQL 和 H2:

CREATE TABLE IF NOT EXISTS OTHERTABLE (
  id BIGINT AUTO_INCREMENT NOT NULL
);
CREATE TABLE IF NOT EXISTS SOMETABLE (
  id BIGINT AUTO_INCREMENT NOT NULL,
  FOREIGN KEY (id) REFERENCES OTHERTABLE(id)
);

因此,如果您在第二条语句中遇到异常,您很可能使用了不同的方式来创建第一个表(OTHERTABLE)。这就是问题所在。

下次如果您提出问题,请同时包括create table第一个表的声明,并发布complete错误信息。

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

org.h2.jdbc.JdbcSQLException:未找到列“ID” 的相关文章

  • mysql 查询选择当月的所有行?

    我有一个名为 startdate 的日期时间类型的列 我必须获取当前月份的开始日期和结束日期之间的所有行 即从 1 11 2014 到 30 11 2014 select from your table where year curdate
  • 选择列表;这与我的 sql 中的 DISTINCT 不兼容

    CREATE DEFINER root localhost PROCEDURE GetAllEventIdList SP in skillId varchar 50 in offsetvalue int in recordlimit int
  • 使用 libpqxx 批量存储数据或如何在 libpqxx 中使用 COPY 语句

    要在 PostgreSQL 中插入批量数据 填充数据库 最快的方法是使用 COPY Source https stackoverflow com questions 758945 whats the fastest way to do a
  • Laravel - 重复键批量插入更新大数据集

    我有大约 80k 条记录 每天需要多次运行插入 更新脚本 INSERT INTO my rankings id rank VALUES 1 100 2 99 3 102 80000 3 ON DUPLICATE KEY UPDATE ran
  • JPA:如何将字符串持久保存到数据库字段中,输入 MYSQL Text

    需求是用户可以写文章 所以我选择typeText为了contentmysql数据库内的字段 我怎样才能转换Java String into MySQL Text 干得好Jim Tough Entity public class Articl
  • MySQL Amazon RDS:超出锁定等待超时

    在 Mysql Amazon RDS 上 当我尝试运行以下 SQL 查询时 UPDATE table1 INNER JOIN table2 USING CommonColumn SET table1 col1 table2 x table1
  • Dapper 在执行时挂起

    我有一个 IDb连接 sql UPDATE 表名 SET json json lastupdate SYSDATE WHERE id id var param new DynamicParameters param Add json jso
  • 在 MySQL 连接字符串中指定密码

    我使用 MySQL 作为 DB 和 Yeoman 生成器创建了 ExpressJS MVC 应用程序 并在config js我想更改 MySQL 连接字符串 但我不知道在字符串中指定密码 我的字符串是mysql root localhost
  • 使用 PHP MySql 进行关键字搜索?

    我的 mysql 表中有标题 varchar 描述 text 关键字 varchar 字段 我保留了关键字字段 因为我认为我只会在这个字段中搜索 但我现在需要在所有三个字段中进行搜索 所以对于关键字 word1 word2 word3 我的
  • 导轨中的多个 DB 连接

    我正在尝试在 ROR 应用程序中连接多个数据库 我的 database yml 如下所示 在你的database yml文件中 发展 adapter mysql username root password database example
  • 如何在 Eloquent 中查询 JSON 列内的数组

    我已经在 Eloquent 中使用 JSON 成功完成了一些查询 但我不知道如何从数组内的对象中查询值 如下所示 在 属性 栏中 有 products media 1 code 4186GSB media 2 code 4186GSE 我想
  • 将 python 列表存储到数据库的最佳方法?

    将 python 数字列表 例如 4 7 10 39 91 存储到数据库的最佳方法是什么 我使用 Pyramid 框架和 SQLAlchemy 与数据库进行通信 Thanks 您可以使用json http docs python org l
  • WooCommerce 中的分页

    我使用这个短代码在页面上显示产品的类别 但是当我们使用它时 它不会显示分页 因为我们的类别中有很多产品 我们使用以下代码 product category category snowpeak per page 12 columns 4 or
  • MySQL/PHP 插入同一行两次

    我不明白为什么这段代码会插入同一行两次 我已经将其精简为以下代码 它被插入的 MySQL 表中有 10 列 但即使查询中提到了所有这些列 它仍然插入 电子邮件受保护 cdn cgi l email protection 分两行 具有单独的主
  • 将mysql数据导入kubernetes pod

    有谁知道如何将我的 dump sql 文件中的数据导入到 kubernetes pod 中 直接 与处理 docker 容器的方式相同 docker exec i container name mysql uroot password se
  • 使用WordPress get_results()数据库函数是否可以防止sql注入

    似乎找不到答案 但想知道以下对数据库的查询是否容易受到 SQL 注入的攻击 searchPostResults wpdb gt get results querySearchVals OBJECT 这是使用的查询 global wpdb o
  • MySQL 匹配全文

    我正在尝试使用 mysql 进行全文搜索以匹配字符串 问题是它首先返回奇怪的结果 例如 字符串 passat 2 0 tdi AND MATCH records veiculos titulo records veiculos descri
  • 如何在 Node 中使用 Mysql2 使用 async 和 pool 获取 MySQL 的 insertId?

    我正在尝试将 async wait 与 mysql2 和池一起使用 但我认为我做错了 下面是我的代码 正如我所说 我不确定我是否在这里做事 const pool mysql createPool host localhost user ro
  • PHP mysql 选择连接

    我有这个功能 以某种形式显示自动建议 function searchbyId params input strtolower params input len strlen input limit isset params limit in
  • 为什么Aries在数据库管理恢复中要先执行redo before undo?

    如果 Aries 算法已经知道在分析阶段之后要撤消哪些事务 为什么它会在撤消之前应用重做 我知道 认为 这与 Lsn 数字和维护一致性有关 因为在磁盘上刷新的数据撤消事务可能与崩溃时撤消事务不同 由于脏数据 页 但我找不到这个问题的任何 正

随机推荐

  • Javascript:最佳单例模式[重复]

    这个问题在这里已经有答案了 可能的重复 在 JavaScript 中实现单例的最简单 最干净的方法 https stackoverflow com questions 1479319 simplest cleanest way to imp
  • 如何使用 MongoDB 和 Mongoid 在 Rails 3 上进行正确的数据库测试 (TDD)

    如何通过 Mongoid on Rails 使用 MongoDB 编写适当的单元测试 以及与此相关的集成测试 我这么问是因为与使用 SQLite3 相反 即使在运行测试时 我所做的一切仍然存在 所以目前我正在编写创建测试 然后我手动删除我所
  • Mock() 函数在 django2 中给出 TypeError

    我正在跟进本教程 https www obeythetestinggoat com book chapter purist unit tests html 当我跑步时test views py根据作者的说法 我有一个不应该出现的错误 Typ
  • SQL Reporting Services - 限制导出格式

    是否可以将导出格式限制为仅 PDF 和 Excel 注释掉或删除要在 渲染 部分中排除的格式rsreportserver config in Program Files Microsoft SQL Server MSSQL
  • 如何更改多个轴标签的字体大小(使用 host_subplot API 创建)

    我在互联网上查看 绝对所有具有多个轴的示例都具有默认值的 xlabel 和 ylabel 并且非常小 我使用以下代码来创建轴 from mpl toolkits axes grid1 import host subplot import m
  • UTF-8 服务器编码会在 ASP.NET 站点上产生 � 字符

    我正在运行 ASP NET WebForms博客引擎 http dotnetblogengine net 网站 maxpavlov com 我的博客上主要用俄语写作 有时 即使我正在写一个完全正常的俄语字符 当我查看生成的渲染博客文章页面时
  • BufferedImage颜色饱和度

    我正在编写一个简单的扫描应用程序自由精神 https github com sjamesr jfreesane and 阿帕奇PDFBox https pdfbox apache org 这是扫描码 InetAddress address
  • 与 QB 桌面产品集成

    几年前 我编写了一个 QB 集成 它使用 Web 连接器在 QB 桌面产品中读取和写入数据 它运行良好 但我不喜欢 Web Connector 我的任务是建立另一个 QB 集成 我希望这次避免使用 Web Connector 我尝试避免使用
  • 如何显示六边形填充颜色的图例?

    我正在 ggplot2 中绘制十六进制图 出现的图例是关于六边形的填充 计数 而不是关于六边形实际热缩放的内容 预测 我如何摆脱计数的图例 但让它显示实际热缩放的内容 预测 这是我的代码和我所指内容的图片 FF1xBARHH lt ggpl
  • Google Cloud Pub/Sub 推送消息 - 空 POST

    我目前已在Google云平台中成功设置主题和订阅 并已通过Google验证了我的网站并将域添加到GCP 每当我尝试从以下位置发送测试消息时https console cloud google com cloudpubsub topics s
  • 无法让小网格线出现在 matplotlib 图中

    好的 我有下面的代码 用于实时绘制通过串行接收的嵌入式设备的一些数据 它并不是一个生产工具 而是一个内部工程工具 因此它不是非常用户友好 问题是 无论我做什么 我都无法让小网格线出现 即使这里它们被设置为True which both 我可
  • 聚合管道和索引

    From http docs mongodb org manual core indexes multikey indexes http docs mongodb org manual core indexes multikey index
  • 如何在 Java 中从原始 byte[] 创建 BMP 文件

    我有一个 C 应用程序 它与相机通信并获取原始图像数据 然后我有一个 C 中的 Byte 我想用 JNI 将其发送到 Java 但是 我需要将原始 Byte 转换为真实的文件格式 bmp 是我的第一选择 如果我使用 BITMAPFILEIN
  • 从R中的循环返回单独的txt文件

    我想返回循环中每次迭代的结果 并将其写入单独的文本文件中 但由于某种原因 它似乎不起作用 我的代码是 for i in length traject player lt subset traject i subset dt 1 test l
  • 哪种排序方法最适合并行处理?

    我现在正在查看我以前的学校作业 想找到问题的答案 哪种排序方法最适合并行处理 冒泡排序 快速排序 归并排序 选择排序 我想快速排序 或合并排序 就是答案 我对么 与合并排序一样 快速排序由于其分而治之的性质也可以轻松并行化 单独的就地分区操
  • 通过 List 发布多个文件

    我只想通过模型将多个文件发布到控制器 class myModel public List
  • Android MediaPlayer 未从prepareAsync 返回

    我在使用特定 URI 启动 MediaPlayer 的 Logcat 中得到以下信息 通常 每个 Uri 无论好坏 都会播放或返回错误 除了这个特定的 Uri I MPS PrepAsync started V MediaPlayer me
  • 如何在 F# 中编写函子在 OCaml 中执行的操作的代码?

    我有很多用 OCaml 编写的程序 其中一些使用函子 现在 我正在考虑用 F 编写和重写部分代码 以受益于 OCaml 不具备的一些优点 我担心的一件事是在 F 中编写函子在 OCaml 中执行的操作的代码 例如 我们如何模仿这个例子来自
  • 在 PHP 开关中使用 strstr

    我只是想不出代码 我有太多 if 语句 我想将其更改为 switch 语句 但我找不到逻辑 目前我有 if strstr var texttosearch echo string contains texttosearch if strst
  • org.h2.jdbc.JdbcSQLException:未找到列“ID”

    我的代码中有以下 DDL CREATE TABLE IF NOT EXISTS SOMETABLE id BIGINT AUTO INCREMENT NOT NULL FOREIGN KEY id REFERENCES OTHERTABLE