首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >org.h2.jdbc.JdbcSQLException:找不到"ID“列

org.h2.jdbc.JdbcSQLException:找不到"ID“列
EN

Stack Overflow用户
提问于 2013-05-29 09:58:42
回答 1查看 16.3K关注 0票数 5

我的代码中有以下DDL:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS SOMETABLE (
  id BIGINT AUTO_INCREMENT NOT NULL,
  ...
  FOREIGN KEY (id) REFERENCES OTHERTABLE(id)
  ...
);

下面是OTHERTABLE的定义:

代码语言:javascript
复制
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数据库,执行此命令会产生以下堆栈跟踪:

代码语言:javascript
复制
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是我们的prod数据库,我别无选择,只能忽略单元测试!!

在H2数据库端有解决这个问题的方法吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-02-28 06:47:57

尝试在项目中使用数据库的完整路径。在排除相对路径后,这个问题得到了解决。在最新的H2数据库版本中使用的"~/RELATIVE_PATH“存在一些错误!错误的示例:"jdbc:h2:~\com\project\db\h2\h2testdb“好的示例:"jdbc:h2:C:\Users\UserName\IdeaProjects\projectname\com.project\src\main\java\com\test\db\h2\h2testdb”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16804321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档