我们目前正在使用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>
一如既往的帮助或建议,非常感谢。谢谢 布拉德
答案 0 :(得分:0)
不需要使用Hibernate。 Flyway.init()
正是您所需要的。