2014-10-07 35 views
0

我正在使用HSQL數據庫來測試spring hibernate項目並最近引入了標識字段。hibernate hsqldb標識列未能插入新字段

的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 4.2.8和HSQLDb 2.3.2。

回答

0

問題是sql中的引號。這使hsqldb中的列名區分大小寫。 hibernate嘗試使用ALL-CAPS查找名稱。

更改DDL中:

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

解決的問題。