0

現在、フライウェイをスタンドアロン コンポーネントとして使用して、現在の顧客のデータベース移行を管理しています。新規のお客様には、flyway の schema_version テーブルと現在のバージョンのエントリを使用して、アプリケーションのデプロイを開始したいと考えています。Hibernate は現在、アプリケーションによって (インストール中に) データベースを初期化し、orm を提供するために使用されています。

schema_version の xml マッピングを作成しようとしたときに、Hibernateには主キーが必要であることがわかりました。次の出力によると、show create table schema_version;主キーはありません。

CREATE TABLE IF NOT EXISTS `schema_version` (
`version_rank` INT(11) NOT NULL,
`installed_rank` INT(11) NOT NULL,
`version` VARCHAR(50) NOT NULL,
`description` VARCHAR(200) NOT NULL,
`type` VARCHAR(20) NOT NULL,
`script` VARCHAR(1000) NOT NULL,
`checksum` INT(11) DEFAULT NULL,
`installed_by` VARCHAR(30) NOT NULL,
`installed_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`execution_time` INT(11) NOT NULL,
`success` TINYINT(1) NOT NULL,
KEY `schema_version_vr_idx` (`version_rank`),
KEY `schema_version_ir_idx` (`installed_rank`),
KEY `schema_version_s_idx` (`success`) 
) ENGINE=INNODB DEFAULT CHARSET=utf8;

私の質問は、主キー用に追加のフィールドを作成したり、schema_version に複合キーを設定したりした場合、flyway は引き続き正しく動作しますか?

現在の Hibernate マッピング xml は次のとおりです。

<hibernate-mapping package="com.hp.cp.psp.persistence.data" catalog="orion" default-lazy="false">
<class name="Schema_VersionDO" table="schema_version" lazy="false">
    <cache usage="nonstrict-read-write"/>

    <id name="id" type="int" /><!-- added to satisfy hibernate (id|composite-id) -->
    <property name="version_rank" type="int" index="schema_version_vr_idx"  not-null="true"/>
    <property name="installed_rank" type="int" index="schema_version_ir_idx" not-null="true"/>
    <property name="version" type="string"  length="50" not-null="true"/>
    <property name="description"  type="string"  length="200" not-null="true" />
    <property name="type"  type="string"  length="20" not-null="true" />
    <property name="script" type="string" length="1000" not-null="true"/>
    <property name="checksum" type="int"/>
    <property name="installed_by" type="string" length="30" not-null="true"/>
    <property name="installedOn" not-null="true">
        <column name="installed_on" sql-type="timestamp" default="CURRENT_TIMESTAMP" />
    </property>
    <property name="execution_time" type="int"  not-null="true"/>
    <property name="success" type="byte" length="1" index="schema_version_s_idx"  not-null="true"/>
</class>
</hibernate-mapping>

いつものように、助けやアドバイスは大歓迎です。ありがとうブラッド

4

1 に答える 1

0

これにHibernateを使用する必要はありません。Flyway.init()まさにあなたが必要なことをします。

于 2013-03-12T09:09:13.607 に答える