【问题标题】:hibernate hsqldb identity column fails to insert new fieldshibernate hsqldb 标识列无法插入新字段
【发布时间】: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。

【问题讨论】:

    标签: java sql database hibernate hsqldb


    【解决方案1】:

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

    更改 ddl:

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

    解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-27
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      相关资源
      最近更新 更多