0

プロジェクトでliquibaseを使用していますが、ビルドが失敗する原因に気づきました。mysqlの同じスキーマに対してコマンドラインgenerateChangeLogを正常に使用し、そのファイルをmaster-change-logファイルに含めました。

テスト環境では、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が失敗しないためだと思います。

エスケープルールはliquibase2.0で変更されている可能性がありますが、変更されていない場合は、qカスタムデータベースクラスのescapeObjectメソッドを簡単にオーバーライドして、機能するかどうかを確認できます。

ただし、引用符は重要ではありません。これらは、テーブル名自体に含まれるべきではありません。

于 2010-08-22T05:41:06.873 に答える