【问题标题】:How can I use liquibase with Java code如何在 Java 代码中使用 liquibase
【发布时间】:2015-07-11 14:20:04
【问题描述】:

我正在尝试在 Spring MVC 项目中使用 liquibase。我可以使用更改日志文件更改数据库,但我想使用 Java 代码更改数据库。 Liquibase 必须看到 hibernate 的变化,并且 liquibase 会警告我这种变化。没有这方面的例子。我怎样才能做到这一点。有例子吗?

我在我的项目中创建这样的数据库。当我这样做(或添加例如列)时,liquibase 会从休眠文件中看到这种变化,并给我警告提交或回滚。我该怎么做?

@Entity
@Table(name="strategy")
public class Strategy {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(unique=true, nullable=false)

    private Integer id;
    @Column
    private String type;
    @Column
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

【问题讨论】:

  • 要直接从java代码运行liquidbase请通过forum.liquibase.org/topic/using-liquibase-directly-from-java
  • 虽然我回答了你的帖子,但你是否尝试提供一个 java 类,它将接收 JDBC 连接并在数据库中执行更改。
  • 感谢您的回答。另一个问题是我的项目没有 bean 属性文件。

标签: database spring hibernate liquibase


【解决方案1】:

如果我正确理解您的问题,您想知道如何将来自 Liquibase 更改日志的更改与来自 Hibernate Schema 生成的更改集成到您的数据库模式。

答案是:你没有

像 Liquibase 这样的工具的整个想法是通过工具专门更改数据库架构。

因此,如果您更改 Hibernate 实体,例如通过添加属性,您将更改添加到 Liquibase 更改日志以保持两者同步。在正常开发过程中,手动操作可能是最简单的。

如果您有很多更改,您可以创建一个changelog from an existing database,这样您就可以使用 Hibernate 模式更新功能生成您的数据库,然后使用这个 Liquibase 功能创建一个更改日志。但请注意,这不会创建增量更改集,您需要能够将更改应用到已经创建了部分模式的现有数据库。

根据@xeoterracide 的评论更新

有一个liquibase hibernate extension 可能会有所帮助。从它的自述文件中:

此 Liquibase 扩展允许您将 Hibernate 配置用作 diff、diffChangeLog 和 generateChangeLog 的比较数据库。 使用此扩展程序的正常工作流程是:

  1. 根据需要编辑您的 Hibernate 映射类(添加和删除类和属性)
  2. 运行

    liquibase --changeLogFile=changelog.xml --url=jdbc:yourdatabase --referenceUrl=hibernate:classic:path/to/hibernate.cfg.xml diffChangeLog
    
  3. 检查修改后的 changelog.xml 是否符合您的预期,如果没有,请编辑它
  4. 运行

    liquibase --changeLogFile=changelog.xml --url=jdbc:yourdatabase update
    
  5. 重复

如果你指定一个现有的 changeLogFile,每次运行 diffChangeLog 将追加到文件中。

【讨论】:

  • 有一种方法可以根据休眠和数据库的差异生成 liquibase 变更集。
  • @xenoterracide 一个答案或至少一个链接会有帮助
  • 抱歉没有,目前在我的待办事项清单上了解如何操作。我认为有一个 liquibase-hibernate4 神器或类似的东西。
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 2012-08-12
  • 2021-09-15
  • 2013-08-10
  • 2011-09-28
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
相关资源
最近更新 更多