如何在H2数据库中使用关键字VALUE作为字段名

问题描述 投票:0回答:1

我继承了一个项目,其中在 UnitTests 中使用了 H2 数据库。在项目启动时,会创建许多表并填充数据。

 CREATE TABLE SRC_FIELD_VALUE
   (    ID NUMBER IDENTITY,
        INPUT_SRC_FIELD_REF_ID NUMBER,
        VALUE VARCHAR2(255),
        DESCRIPTION VARCHAR2(255)
   );

我们最近迁移到最新版本的 H2:2.1.214

在我的 POM.XML 中,我在定义末尾添加了“NON_KEYWORDS=VALUE,ID”,但仍然出现异常:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "CREATE TABLE SRC_FIELD_VALUE ( ID NUMBER IDENTITY, INPUT_SRC_FIELD_REF_ID NUMBER, [*]VALUE VARCHAR2(255),            DESCRIPTION VARCHAR2(255) )"; expected "identifier"; SQL statement:
CREATE TABLE TC_RULE_COMP_DATA ( ID NUMBER IDENTITY, RULE_REF_ID NUMBER, SORT_ORDER NUMBER, VALUE CLOB ) [42001-214]

我还尝试在“VALUE”周围加上双引号,但得到了相同的异常。有趣的是,“ID”并没有被视为关键字。

我有哪些选择?我无法重命名字段。

h2 keyword
1个回答
0
投票

VALUE 是 SQL 标准和 H2 中的保留字,不能用作不带引号的标识符。

处理这个问题的方法,在@SpringBootTest中,是配置数据源url:

spring.datasource.url=jdbc:h2:mem:thedatabase;NON_KEYWORDS=VALUE

PS:这个答案是根据 Evgenij 的评论编译的

并禁用测试数据库替换:

spring.test.database.replace=none
© www.soinside.com 2019 - 2024. All rights reserved.