【问题标题】:HSQLDB with mssql keywords table name带有 mssql 关键字的 HSQLDB 表名
【发布时间】:2012-05-31 02:26:21
【问题描述】:

我正在尝试将所有 junit 测试切换到 hsqldb(真正的 db 是 oracle)。当我尝试映射包含以下内容的 .hbm.xml 文件时出现问题:

<property name="begin" type="integer" column="BEGIN" /> <property name="end" type="integer" column="END" />

现在在 mem db build 期间,我得到了以下信息:

错误 - 不成功:创建表 BLOCKTIME(ID bigint 不为空,BEGIN 整数,END 整数,TIMEZONE varchar(255),主键 (ID)) 错误 - 意外令牌:语句中的 END [创建表 BLOCKTIME(ID bigint 不为空,BEGIN 整数,END]

问题似乎是限制为 mssql 作为关键字的 BEGIN 和 END 表名。

知道如何省略这个问题吗?

谢谢, 马立克。

【问题讨论】:

  • 如果你只使用Oracle和HSQLDB,为什么要提到“mssql”?但是是的,BEGIN 是 HSQLDB 中的保留字(我认为实际上是在 SQL 中),我很惊讶您可以首先在 Oracle 中创建这样的列
  • BEGIN / END 在 ORACLE 中可接受,但在 mssql 中不可接受
  • 但是你用的不是MS SQL(至少你只说HSQLDB和Oracle)
  • 是的,但是当我开始使用 HSQLDialect 而不是 oracle 方言时,休眠将 BEGIN 和 END 视为关键字(这些是 mssql 关键字)
  • 这些是 HSQLDB 关键字,与 MS SQL 无关。我真的很惊讶 HSQLDB 接受(理论上)无效的 Microsoft 使用 [] 引用关键字的风格

标签: java hibernate hsqldb


【解决方案1】:

你可以转义列名:

<property name="begin" type="integer" >
  <column name="[begin]" />
</property>

或者

<property name="begin" type="integer" >
  <column name='"begin"' />
</property>

【讨论】:

  • 谢谢兄弟,这么简单的解决方案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多