H2(版本 2.0.202)auto_increment 不起作用

Posted

技术标签:

【中文标题】H2(版本 2.0.202)auto_increment 不起作用【英文标题】:H2 (version 2.0.202 ) auto_increment not working 【发布时间】:2022-01-23 23:16:27 【问题描述】:

我从 1.4.200 -> 2.0.202 更新了 com.h2database 的版本。 liquibase 的版本是 4.3.5。

JDBC 连接字符串如下所示:

jdbc:h2:mem:database1;DB_CLOSE_DELAY=-1;MODE=Oracle;

而且,我有一个这样的 liquibase changeSet:

> databaseChangeLog:
>  - changeSet:
>      id:01
>      author:XYZ
>      changes:
>       - createTable:
>           columns:
>            - column:
>                autoIncrement:true
>                constraints:
>                  nullable: false
>                  primaryKey: true
>                  primaryKeyName: PK_table_employee
>                name: id
>                type: int
>            - column:
>                name: name
>                type: nvarchar(255)
>           tableName: table_employee

执行时给定的changeSet在H2(版本1.4.200)中创建“table-employee”,但相同的changeSet给出错误提示:

Error creating bean with name 'liquibase; defined in class path .....
Reason: liquibase.exception.DatabaseException: Syntax error in SQL statement "CREATE TABLE DBO.TBL_EMPLOYEE (ID INT AUTO_INCREMENT[*], NAME NVARCHAR(255))"

.....

我看到“AUTO_INCREMENT”在 H2(版本 2.0.202)中不起作用。

有什么办法可以解决这个问题吗?

【问题讨论】:

这和oracle有什么关系? 只是H2的模式是Oracle:jdbc:h2:mem:database1;DB_CLOSE_DELAY=-1;MODE=Oracle; 你可以试试IDENTITY。 ***.com/questions/68115697/… 你可以试试IDENTITY。 ***.com/questions/68115697/… @shanfeng 谢谢。 【参考方案1】:

在默认的常规模式下,H2 2.0 像正常的标准兼容数据库一样工作,并拒绝,例如,尝试将 NULL 值插入具有 NOT NULL 约束的列中,但 Hibernate 会尝试这样做,请参阅问题 HHH-14985。

【讨论】:

对不起,我可能不清楚,实际上我在执行上述 chagneset 时遇到了问题,它试图为 ID 列创建一个带有“autoIncrement:true”的表。

以上是关于H2(版本 2.0.202)auto_increment 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

HHH000431:无法确定 H2 数据库版本,某些功能可能无法使用

04.Win11_22H2_2023年2月官方累积更新镜像下载

04.Win10_22H2_2023年2月官方累积更新镜像下载

如何在 Grails 3 Gradle 项目中控制 H2 驱动程序版本?

如果在内存 DB 中使用 H2,则 Flyway 从版本 1 开始

h2 web console使用