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 驱动程序版本?