【发布时间】:2020-02-14 04:09:39
【问题描述】:
我使用 liquibase 初始化我的 h2 数据库以进行单元测试,但是使用“key”作为列名的一个表存在问题。
我尝试将“_key”作为名称,它可以工作,但数据库(我无法更改其架构)使用“key”作为列名,所以我必须将 @Column("\"key\"") 放入我的域类。这适用于 SQL Server(生产数据库),但不适用于 h2(在内存数据库中进行测试)
在 Liquibase xml 中:(用于单元测试)
<column name='_key' type="varchar(100)">
<constraints nullable="true" />
</column>
我的域名:
@Column(name = "_key", length = 100)
//@Column(name = "\"key\"", length = 100)
private String key;
所以我必须取消注释第一个选项并注释第二个选项以使单元测试正常工作,并执行相反的操作以使应用程序正常工作。
使用
@Column(name = "\"key\"", length = 100)
和
<column name="key" type="varchar(100)"> 或
<column name="\"key\"" type="varchar(100)"> 或
<column name='"key"' type="varchar(100)">
返回错误:
架构验证:表 [displaymessages] 中缺少列 [key]
创建表的查询是:
CREATE TABLE PUBLIC.displaymessages (
id BIGINT AUTO_INCREMENT NOT NULL,
"'key'" VARCHAR(100),
value VARCHAR(1000),
type INT NOT NULL,
createdon date NOT NULL,
modifiedon date,
isdeleted INT NOT NULL,
CONSTRAINT PK_DISPLAYMESSAGES PRIMARY KEY (id)
)
【问题讨论】:
标签: sql-server spring-boot unit-testing h2 liquibase