2016-03-13 45 views
1

變化的Grails GORM格式我有一個已經運行了一段時間一個Grails應用程序。但現在我想改變格姆格式,我不知道是否有簡單的方法可以做到這一點,我並不需要刪除現有的表,只改變我的應用程序會做即方式。不放棄現有的表

具體而言,我曾經有被映射在DB到VARBINARY一個HashSet的字段。該用戶表中有一些現有的行。

public class User{ 
    //irrelevant attributes omitted 
    HashSet<String> friends=new HashSet<>(); 
    static mapping={ 
     friends sqlType: 'VARBINARY(10000)' 
    } 

} 

現在我已經改變了場friendsHashMap<String,Integer>

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 

我首先懷疑的Grails保持舊的轉換規則轉換的HashSet到VARBINARY並沒有更新:現在雖然我還映射領域爲varchar,Grails的每一次我保存用戶對象拋出異常。所以我試圖改變從varbinary到blob和文本的映射,但都沒有奏效。

,如果有,我記住這列VARBINARY在DB,同時讓Grails的知道屬性現在在HashMap和它應該產生新的ruls轉換的方法,我想知道。

感謝您的寶貴意見!

編輯:林使用Grails 2.4.4

+1

看看數據庫遷移插件。它會照顧模式更改。 https://grails.org/plugin/database-migration –

+0

@Sascha似乎很有幫助:P我會嘗試一下。謝謝!! – OrlandoL

回答

2

有一個我知道這樣做的方法:登錄到數據庫服務器,所以你必須在一個詞窗口訪問數據庫。先在你的開發機器上做這件事。看看相關的列,看看他們使用哪些數據類型。然後,在您的開發機器上,刪除這些列並部署已更改的項目。如果你的gorm被設置爲'update',新的列將被創建。再次檢查相關列,看看是否有任何方法將生產數據庫中的舊列(alter table ...)更改爲新列。您必須停止生產服務器,進行更改,部署新項目並重新啓動它。如果您不能只更改列,則可能需要創建新列,移動數據並刪除舊列 - 所有這些都是在應用程序服務器停止的情況下完成的。

+0

感謝您的建議,我今天晚上嘗試:P。其實我正在考慮直接對DB進行類似的修改。我問,因爲我認爲可能有一種在Grails本身內部更有凝聚力的方式。 – OrlandoL