gpt4 book ai didi

spring-boot - 升级到 Spring Boot 2.7 时测试失败 - "CommandAcceptanceException: Error executing DDL"

转载 作者:行者123 更新时间:2023-12-05 09:01:55 25 4
gpt4 key购买 nike

升级到 Boot 2.7 后,使用嵌入式 H2 数据库的集成测试开始失败。

我在日志中看到这条 WARN 消息,但不是很清楚原因或解决方案:

WARN 8053 ---[           main] o.h.t.s.i.ExceptionHandlerLoggedImpl     :GenerationTarget encountered exception accepting command : Error executing DDL "create table user (id bigint generated by default as identity, email varchar(255) not null, name varchar(255), primary key (id))" via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table user (id bigint generated by default as identity, email varchar(255) not null, name varchar(255), primary key (id))" via JDBC Statement
...
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "create table [*]user (id bigint generated by default as identity, email varchar(255) not null, name varchar(255), primary key (id))"; expected "identifier"; SQL statement:
create table user (id bigint generated by default as identity, email varchar(255) not null, name varchar(255), primary key (id)) [42001-212]
...

看来我的 User 表在升级后没有创建,因此导致我的测试失败。

最佳答案

似乎 Boot 2.7 将其 H2 依赖升级到了 2.x,它不向后兼容并引入了几个变化: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#h2-21

问题是 User 现在是关键字/保留字(H2 "migration-to-v2" guide 对我来说不是很有帮助;它提到添加了新关键字,但没有提供链接到):

https://www.h2database.com/html/advanced.html#keywords

所以,我必须做的是使用 "quoted names"定义我的实体的表名(似乎我也可以在表注释中使用反引号而不是转义双引号):

@Table(name="\"user\"")
@Entity
public class User {
...

我还必须在我的 data.sql 文件中为此表使用双引号:

INSERT INTO "user"(id, email, name) VALUES(1, 'test@user.com', 'Test User');

注意:迁移指南还提到了使用 the SET NON_KEYWORDS command 的可能性作为解决方法,但它也不鼓励它。

关于spring-boot - 升级到 Spring Boot 2.7 时测试失败 - "CommandAcceptanceException: Error executing DDL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72546596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com