【问题标题】:Connecting maven with liquibase with hibernate?将 maven 与 liquibase 与休眠连接?
【发布时间】:2016-08-26 14:50:41
【问题描述】:

我有一个基于 Maven 的项目,它使用 Hibernate 和 Postgres(无 Spring)。

我想使用 Liquibase 进行数据库迁移。理想情况下,我想要以下工作流程:

  1. 我创建了应该初始化数据库的初始“变更集”(mvn liquibase:generateChangeLog?)。

  2. 我添加了带有适当注释的实体类。我生成一个“差异”变更集(mvn liquibase:diff ?)并将其检入存储库。

  3. 现在我团队中的每个人都从存储库中提取并运行一些东西(mvn update?)以更新他们的数据库副本。

  4. 我根据需要重复前两个步骤。 我知道 Liquibase 应该支持这种开发工作流程。问题是,有很多活动部件,我正在努力将它们连接在一起

例如,如何在 Maven 中配置 Liquibase?在 liquibase.properties 中?如何指定更改集的存储位置?,如何创建初始“更改集”?我知道变更集可能有不同的格式,(XML、JSON 等)有什么优点和缺点,它们可以简单地在 SQL 中吗?

【问题讨论】:

    标签: hibernate maven liquibase


    【解决方案1】:

    liquibase 有一个 maven 插件,可以通过基于 maven 的解决方案完成此操作。

    http://www.liquibase.org/documentation/maven/generated/update-mojo.html

    然后您可以使用目标 liquibase:update 运行您的 maven 构建

    例如,如果你想连接到 mysql 数据库(liquibase 支持许多不同的数据库)

        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
        </dependencies>
    
    
    
    
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.4.1</version>
                <configuration>
                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                    <changeLogFile>${changelog}</changeLogFile>
                    <driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.schema}</url>
                    <username>${mysql.username}</username>
                    <password>${mysql.password}</password>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    我们也可以与 hibernate 集成,github 中有一个项目,请查看他们通过 hibernate 执行此操作的文档。

    https://github.com/liquibase/liquibase-hibernate/releases

    希望这能回答你的问题

    编辑:

    liquibase --driver=oracle.jdbc.OracleDriver \
          --classpath=\path\to\classes:jdbcdriver.jar \
          --changeLogFile=com/example/db.changelog.xml \
          --url="jdbc:oracle:thin:@localhost:1521:XE" \
          --username=scott \
          --password=tiger \
          generateChangeLog
    

    这将为现有数据库生成更改日志。

    参考 - http://www.liquibase.org/documentation/generating_changelogs.html

    参考 - http://bytefilia.com/managing-database-schema-changes-liquibase-existing-schema/

    请注意,此命令目前有一些限制。它不导出以下类型的对象: 存储过程、函数、包 触发器

    【讨论】:

    • 我知道这个插件,谢谢。如何使用此插件在新项目中生成初始变更集?我也知道它与 Hibernate 集成,并且“mvn liquibase:diff”可以找出模型中的变化,至少在理论上是这样(由于某种原因,它在一个简单的项目中给了我 NullPointerException)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多