You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot升级至2.7.3后执行DDL时H2数据库报错

Spring Boot 2.7.3升级后Hibernate执行DDL报错(H2数据库)

问题详情

将Spring Boot从2.6.3版本升级至2.7.3版本(H2数据库随Spring Boot同步更新)后,启动应用时Hibernate执行DDL创建表失败,报错信息如下:

GenerationTarget encountered exception accepting command : Error executing DDL "create table appa_attributes (id bigint generated by default as identity, name varchar(255), value varchar(4000), primary key (id))" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table appa_attributes (id bigint generated by default as identity, name varchar(255), value varchar(4000), primary key (id))" via JDBC Statement

应用配置(application.properties)

server.port=8080
spring.mvc.favicon.enabled = false // 该配置在2.7版本已废弃
spring.datasource.url=jdbc:h2:mem:testdb
spring.h2.console.enabled=true
spring.h2.console.path=/console/
spring.h2.console.settings.web-allow-others=true
spring.jpa.hibernate.ddl-auto=create-drop

实体类代码(Attribute.java)

@Entity
@Table(name = "appa_attributes")
public class Attribute extends AbstractEntity<Long> implements Comparable<Attribute> {

    @Column(length = 255)
    private String name;

    @Column(length = 4000)
    private String value;

    // getters and setters
}

解决办法

1. 给H2 URL添加兼容模式参数

新版本H2对SQL语法规则做了调整,在JDBC URL中加入兼容模式参数可解决多数语法兼容问题。比如使用旧版兼容模式:

spring.datasource.url=jdbc:h2:mem:testdb;MODE=LEGACY;DB_CLOSE_DELAY=-1

若代码原适配MySQL,也可使用MySQL兼容模式:

spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1

2. 指定Hibernate的H2方言

显式指定适配新版H2的方言,避免版本匹配问题,在配置文件中添加:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

3. 确认主键生成策略

报错中的generated by default as identity语法在新版H2中存在兼容风险,检查AbstractEntity的ID字段是否显式指定生成策略:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

显式指定IDENTITY策略能让Hibernate生成符合新版H2要求的DDL语句。

4. 清理H2残留数据(文件模式适用)

若使用H2文件存储模式,删除旧数据库文件后重启应用,避免旧数据结构干扰新DDL执行;内存模式只需重启应用即可清空数据。

内容的提问来源于stack exchange,提问作者jadhamterra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:40:21