0

我在一个项目上使用 liquibase,我才意识到是什么让我的构建失败。我已经成功地使用命令行 generateChangeLog 针对 mysql 中的相同模式并将该文件包含在我的主更改日志文件中。

对于测试环境,我使用 hsqldb。现在所有表名都是连字符与语言分开的。由于我的构建失败,我打开了 mydb.script,所有连字符分隔的表名都是大写的,但语言看起来像这样

CREATE MEMORY TABLE SOME_TABLE(ID BIGINT NOT NULL,OBJ_VESION INTEGER DEFAULT 0 NOT NULL,REQUESTER_PHONE VARCHAR(20),FORM_CODE VARCHAR(100),DATE_STARTED TIMESTAMP,DATE_ENDED TIMESTAMP,LAST_ACTIVITY TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,SOME_TABLE_STATUS VARCHAR(255),CONSTRAINT PK_INCOMING_MESSAGE_SESSION PRIMARY KEY(ID))  

CREATE MEMORY TABLE "language"(ID BIGINT NOT NULL,CODE VARCHAR(10),NAME VARCHAR(50),DESCRIPTION VARCHAR(255),CONSTRAINT PK_LANGUAGE PRIMARY KEY(ID))

在更改日志文件中,它们看起来像这样

<changeSet author="highjo (generated)" id="1282409084036-10">
    <createTable tableName="some_table">
        <column name="id" type="BIGINT">
            <constraints nullable="false" primaryKey="true"/>
        </column>
        <column defaultValueNumeric="0" name="obj_vesion" type="INT">
            <constraints nullable="false"/>
        </column>
       <!-- ... -->
    </createTable>
</changeSet>
<changeSet author="highjo (generated)" id="1282409084036-11">
    <createTable tableName="language">
        <column name="id" type="BIGINT">
            <constraints nullable="false" primaryKey="true"/>
        </column>
        <column name="code" type="VARCHAR(10)"/>
        <!-- .... -->
    </createTable>
</changeSet>

您可以注意到它们在更改日志文件中都是小写字母。我尝试将更改日志语言更改为大写,而在脚本中它是大写的,只是它仍然有双引号。:(

如何解决这个问题?谢谢阅读。

4

1 回答 1

0

我认为语言被引用的原因是因为它是 hsql 中的保留字,所以 liquibase 引用它,这样 SQL 就不会失败。

liquibase 2.0 的转义规则可能已更改,但如果不是,您可以更轻松地覆盖 q 自定义数据库类中的 escapeObject 方法并查看它是否有效。

不过,引号应该不重要。它们不应出现在表名本身中。

于 2010-08-22T05:41:06.873 回答