2015-07-11 106 views
0

我想在Spring MVC项目中使用liquibase。我可以使用changelog文件更改数据库,但是我想用Java代码更改数据库。 Liquibase必须看到休眠和liquibase的变化警告我这种变化。没有这样的例子。我怎样才能做到这一点。有没有例子?我如何使用liquibase与Java代码

我在我的项目中创建了这样的数据库。当我这样做的时候(或者添加列),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; 
    } 
} 
+0

尽管我回答了你的文章,你是否尝试提供一个java类,它将接收一个JDBC连接并将执行数据库中的更改。 – Amogh

+0

要直接从java代码运行liquidbase请通过http://forum.liquibase。org/topic/using-liquibase-directly-from-java – Amogh

+0

谢谢你的回答。另一个问题是我的项目没有bean属性文件。 – stackMVC

回答

2

如果我理解你的问题正确,您想知道如何整合从Liquibase更新日志与那些从休眠模式生成即将到来的变化对数据库模式。

答案是:你不

像Liquibase工具的整体思路是通过专门的工具更改数据库架构。

因此,如果您通过添加属性来更改Hibernate实体,请在Liquibase更新日志中添加更改以保持两者同步。在正常的开发过程中,手动操作最容易。

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

评论

更新有一个liquibase hibernate extension这可能是有益的。从它的自述:

这Liquibase扩展可让您使用Hibernate配置为 比较数据库差异,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 的每次运行将追加到该文件。

+0

有一种方法可以从休眠和数据库差异中生成liquibase变更集。 – xenoterracide

+0

@xenoterracide一个答案或至少一个链接将是有帮助的 –

+0

抱歉没有一个,找出如何做到这一点目前在我的待办事项列表。我认为有一个liquibase-hibernate4神器或一些这样的东西。 – xenoterracide