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 标识列无法插入新字段的主要内容,如果未能解决你的问题,请参考以下文章
使用本机 SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为啥?
Hibernate Update 在 HSQLDB 中转换删除/插入
SimpleJdbcInsert由于自动生成的ID(HSQLDB)为空而无法插入