2015-07-11 108 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