我继承了一个项目,其中在 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”并没有被视为关键字。
我有哪些选择?我无法重命名字段。
VALUE 是 SQL 标准和 H2 中的保留字,不能用作不带引号的标识符。
处理这个问题的方法,在@SpringBootTest中,是配置数据源url:
spring.datasource.url=jdbc:h2:mem:thedatabase;NON_KEYWORDS=VALUE
PS:这个答案是根据 Evgenij 的评论编译的
并禁用测试数据库替换:
spring.test.database.replace=none