2015-07-20 69 views
1

我有一個spring roo hibernate項目和一個MySql數據庫,我想用liquibase來管理遷移。liquibase case diff和generateChangeLog問題

我生成了初始更新日誌,並執行了changelogSync以將所有更新日誌標記爲已應用。現在,當我做了差異(沒有修改任何東西),我預計差異是空的。然而,它刪除了所有現有的表格並創建了具有不同名稱的新表格。

例如,一個樣品變更與generateChangeLog:

<changeSet author="author (generated)" id="1437392254522-37"> 
    <createTable tableName="user_roles"> 
     <column name="user" type="BIGINT(19)"> 
      <constraints nullable="false"/> 
     </column> 
     <column name="roles" type="BIGINT(19)"> 
      <constraints nullable="false"/> 
     </column> 
    </createTable> 
</changeSet> 

變更與差異:

<changeSet author="author (generated)" id="1437395711084-26"> 
    <createTable tableName="User_Role"> 
     <column name="User_id" type="BIGINT"> 
      <constraints nullable="false"/> 
     </column> 
     <column name="roles_id" type="BIGINT"> 
      <constraints nullable="false"/> 
     </column> 
    </createTable> 
</changeSet> 

有沒有,我很想念任何設置?

+0

這是非常奇怪的。你確定你在兩個實例中都使用了相同的數據庫嗎?如果只存在案例差異,那將是一回事,但我也看到名稱上的差異(user_roles vs User_Role)。這讓我覺得有一些不尋常的事情發生。我會使用像Squirrel SQL或MySqlAdmin這樣的外部工具來查看是否存在多個數據庫/模式。 – SteveDonie

+0

單個數據庫。我放棄了schema,並在運行generateChangeLog和diff之前使用hibernate的hbm2ddl生成基本表。 –

回答

3

我沒有在參考url中指定命名策略。我認爲它會從persistenceUnit的屬性中選取它。

所以我修改

referenceUrl:hibernate:ejb3:persistenceUnit 

referenceUrl:hibernate:ejb3:persistenceUnit?hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy