hibernate hsqldb 标识列无法插入新字段

Posted

技术标签:

【中文标题】hibernate hsqldb 标识列无法插入新字段【英文标题】:hibernate hsqldb identity column fails to insert new fields 【发布时间】:2014-10-07 14:05:05 【问题描述】:

我正在使用 HSQL 数据库来测试一个 spring hibernate 项目,并且最近引入了一个标识字段。

java类看起来像(sn-p):

@Entity
@Table(name = "my_table")
public class MyTable 

    @Column(name = "sequence_number")
    @Id
    @GeneratedValue
    private Long sequenceNumber;

我生成表的sql脚本如下(sn-p):

CREATE TABLE my_table (
    "sequence_number" BIGINT GENERATED BY DEFAULT AS IDENTITY,
    PRIMARY KEY("sequence_number")
);

当我尝试向数据库添加值时,sql(通过 show_sql)是:

insert into my_table (sequence_number) values (default)

我得到一个异常堆栈跟踪作为关键指标:

org.hibernate.exception.SQLGrammarException: could not prepare statement
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: SEQUENCE_NUMBER

我怀疑 HSQLDB 不喜欢default SQL 关键字,而是希望看到null。有没有办法通过休眠获得这种行为?

否则,有没有办法让这段代码工作?

我使用的是休眠 4.2.8 和 HSQLDb 2.3.2。

【问题讨论】:

【参考方案1】:

问题是 sql 中的引号。这使得 hsqldb 中的列名区分大小写。 hibernate 尝试查找全大写的名称。

更改 ddl:

CREATE TABLE my_table (
    sequence_number BIGINT GENERATED BY DEFAULT AS IDENTITY,
    PRIMARY KEY(sequence_number) );

解决了这个问题。

【讨论】:

以上是关于hibernate hsqldb 标识列无法插入新字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HSQLDB 1.8 中查找表的标识列

使用本机 SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为啥?

Hibernate Update 在 HSQLDB 中转换删除/插入

SimpleJdbcInsert由于自动生成的ID(HSQLDB)为空而无法插入

Spring Test:无法从 import.sql 文件将十六进制值插入 hsqldb

当嵌入式键包含 SQL Server 上的标识列时,休眠插入失败