带有 Hibernate 4.3.6 的 HSQLDB 2.3.2 中的语法错误

Posted

技术标签:

【中文标题】带有 Hibernate 4.3.6 的 HSQLDB 2.3.2 中的语法错误【英文标题】:Syntax error in HSQLDB 2.3.2 with Hibernate 4.3.6 【发布时间】:2014-09-29 17:47:03 【问题描述】:

我正在使用 Spring 4.0.6 + Spring data 1.6.2 + Hibernate 4.3.6 + Hsqldb 2.3.2 和我现在使用 H2 db 的应用程序。

这些是我的 jpa 配置的相关部分:

<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url"
        value="jdbc:hsqldb:file:~/db/test" />

...

<property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />

...

不幸的是,当我的应用开始尝试创建数据库时,我遇到了以下错误:

29/09/2014 19:39:13 ERROR SchemaUpdate:236 - HHH000388: Unsuccessful: create table 

Comunicazione (id bigint generated by default as identity (start with 1), creatoDa varchar(255), dataInserimento timestamp, dataUltimaModifica timestamp, modificatoDa varchar(255), ENTITY_UID varchar(36) not null, version integer, codiceEsterno varchar(255) not null, cognome varchar(255), email varchar(255), nome varchar(255), preferenzaEmail VARCHAR(255) default 'NO' not null, preferenzaSms VARCHAR(255) default 'NO' not null, preferenzaTelefonata VARCHAR(255) default 'NO' not null, sesso varchar(255), sorgenteAggiornamento varchar(255), statoEmail VARCHAR(255) default 'DA_INVIARE' not null, statoSms VARCHAR(255) default 'DA_INVIARE' not null, statoTelefonata VARCHAR(255) default 'DA_EFFETTUARE' not null, telefonoCasa varchar(255), telefonoCellulare varchar(255), telefonoUfficio varchar(255), tentativiTelefonata INT(10) default 0 not null, titolo varchar(255), template_id bigint not null, primary key (id))
29/09/2014 19:39:13 ERROR SchemaUpdate:237 - unexpected token: (
29/09/2014 19:39:13 ERROR SchemaUpdate:236 - HHH000388: Unsuccessful: create table Log (id bigint generated by default as identity (start with 1), creatoDa varchar(255), dataInserimento timestamp, dataUltimaModifica timestamp, modificatoDa varchar(255), ENTITY_UID varchar(36) not null, version integer, posizione clob(255), testo LONGTEXT, tipologia varchar(255) not null, titolo LONGTEXT, primary key (id))
29/09/2014 19:39:13 ERROR SchemaUpdate:237 - type not found or user lacks privilege: LONGTEXT

看来方言的语法是错误的。这很奇怪。

一些想法?谢谢

【问题讨论】:

【参考方案1】:

我解决了这个问题。

问题出在我使用的实体中@Column 的定义中:

@Column(nullable = false, columnDefinition = "INT(10) default 0")

有一个 mysql 兼容的语法。但是 HSQLDB 需要不同的列定义:

@Column(nullable = false, columnDefinition = "INT default 0")

【讨论】:

以上是关于带有 Hibernate 4.3.6 的 HSQLDB 2.3.2 中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

带有 Hibernate 4.3.6 的 HSQLDB 2.3.2 中的语法错误

Hibernate、Spring 和 HSQL:找不到表异常

用于 HSQL 的宠物诊所 hibernate.dialect

为啥 Hibernate 将模式名称添加到 Hsql 函数?

Hibernate @Where 子句在 HSQL 和 MySQL 之间不一致

在 LightAdmin (Spring/JPA/Hibernate) 中使 HSQL 数据库持久化