我正在尝试在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;
}
}
答案 0 :(得分:2)
如果我正确地理解了您的问题,那么您想知道如何将来自Liquibase更改日志的数据库模式的更改与来自Hibernate模式生成的更改集成。
答案是:你没有
Liquibase等工具的整体思想是通过该工具专门更改数据库模式。
因此,如果您通过添加属性更改Hibernate实体,则可以对Liquibase更改日志添加更改以使两者保持同步。在正常开发期间,手动执行此操作可能最容易。
如果您有许多更改,则可以创建changelog from an existing database,这样您就可以使用Hibernate架构更新功能生成数据库,然后使用此Liquibase功能创建更改日志。但请注意,这不会创建增量更改集,您需要能够将更改应用于已创建模式的现有数据库。
根据@xeoterracide
的评论进行更新有一个liquibase hibernate extension可能会有所帮助。从它的自述文件:
此Liquibase扩展允许您将Hibernate配置用作 diff,diffChangeLog和generateChangeLog的比较数据库。 使用此扩展程序的正常工作流程为:
- 根据需要编辑Hibernate映射类(添加和删除类和属性)
运行
liquibase --changeLogFile=changelog.xml --url=jdbc:yourdatabase --referenceUrl=hibernate:classic:path/to/hibernate.cfg.xml diffChangeLog
- 检查修改后的changelog.xml是否符合预期,如果不符合
则进行编辑运行
liquibase --changeLogFile=changelog.xml --url=jdbc:yourdatabase update
- 重复
醇>如果指定现有的changeLogFile,则每次运行diffChangeLog 将附加到文件。