我使用HSQL数据库测试spring hibernate项目,最近引入了一个identity字段。
java类看起来像(片段):
@Entity
@Table(name = "my_table")
public class MyTable {
@Column(name = "sequence_number")
@Id
@GeneratedValue
private Long sequenceNumber;
}
我的sql脚本生成表格如下(摘录):
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)
我得到一个带有关键指标的exeption堆栈跟踪:
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
。无论如何通过hibernate获得这种行为?
否则,有没有办法让这段代码起作用?
我使用的是hibernate 4.2.8和HSQLDb 2.3.2。
答案 0 :(得分:0)
问题是sql中的引号。这使得hsqldb中的列名称区分大小写。 hibernate尝试使用ALL-CAPS查找名称。
更改ddl:
CREATE TABLE my_table (
sequence_number BIGINT GENERATED BY DEFAULT AS IDENTITY,
PRIMARY KEY(sequence_number) );
解决了这个问题。