【问题标题】:Using Hibernate to initialize flyway's schema_version table使用 Hibernate 初始化 flyway 的 schema_version 表
【发布时间】:2013-02-27 04:20:36
【问题描述】:

我们目前使用 flyway 作为独立组件来管理我们当前客户的数据库迁移。对于新客户,我们想开始使用 flyway 的 schema_version 表部署我们的应用程序,以及当前版本的条目。我们的应用程序当前使用 Hibernate 来初始化数据库(在安装期间),并提供一个 orm。

当我尝试为schema_version创建xml映射时,我发现Hibernate requires a primary key,根据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>

我们一如既往地非常感谢您的帮助或建议。谢谢 布拉德

【问题讨论】:

    标签: hibernate primary-key flyway


    【解决方案1】:

    不需要为此使用 Hibernate。 Flyway.init() 完全满足您的需求。

    【讨论】:

    • 一如既往,感谢您的快速回复!我们软件的当前决定是在安装过程中不会使用 flyway 或将其集成到主应用程序中。我必须让他们相信它应该是,初始化和接口到飞行路属性。他们希望从 UI 中查看数据库版本,并且集成到 hibernate 中似乎不安全且工作量太大。再次感谢。
    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2013-12-26
    • 1970-01-01
    • 2020-06-25
    • 2019-01-31
    相关资源
    最近更新 更多