如何将liquibase与Java代码一起使用

时间:2015-07-11 14:20:05

标签: database spring hibernate liquibase

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

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

@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;
    }
}

1 个答案:

答案 0 :(得分:2)

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

答案是:你没有

Liquibase等工具的整体思想是通过该工具专门更改数据库模式。

因此,如果您通过添加属性更改Hibernate实体,则可以对Liquibase更改日志添加更改以使两者保持同步。在正常开发期间,手动执行此操作可能最容易。

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

根据@xeoterracide

的评论进行更新

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

  

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

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

    liquibase --changeLogFile=changelog.xml --url=jdbc:yourdatabase --referenceUrl=hibernate:classic:path/to/hibernate.cfg.xml diffChangeLog
    
  4.   
  5. 检查修改后的changelog.xml是否符合预期,如果不符合
  6. 则进行编辑   
  7. 运行

    liquibase --changeLogFile=changelog.xml --url=jdbc:yourdatabase update
    
  8.   
  9. 重复
  10.         

    如果指定现有的changeLogFile,则每次运行diffChangeLog   将附加到文件。