2012-07-12 40 views
3

我在Grails有點新鮮感。我已經與它合作了一點,但沒有那麼多。儘管我對Java很熟悉。我的問題是關於模式更新。我知道Grails通過查看域類來創建Hibernate映射,因此如果我添加一個新屬性,Grails會自動爲數據庫中的該屬性添加一列。反之亦然?如果我刪除了一個屬性,該列是否被刪除?我沒有看到這種行爲,所以我想知道這是否是一個配置問題。我想我將不得不使用數據庫管理插件或類似Liquibase的東西。但是,我正在開展的這個項目非常簡單,目前我們還沒有決定我們是否正朝着這個方向前進。從域類中刪除屬性是否會導致模式的自動更新,從而刪除相應的列?

回答

10

這取決於您的dbCreate設置DataSource.groovy。如果它是createcreate-drop那麼當您重新啓動時,所有內容都會重建。如果它是update,則添加新的表格和列。如果是其他設置,則不做任何更改。

update不符合大多數人的期望。這是悲觀的,不會做出可能導致數據丟失或損壞的更改。所以即使寬度較大也不會改變列的大小(例如,VARCHAR(50) - >VARCHAR(200))。它不會添加索引。它會添加一個指定爲非空的新列,但它會將其添加爲空,否則以前插入的行將無效。但它不會刪除列或表格。所以你可以很容易地進入一個場景,你可以重新命名一個字段,並最終得到兩個 - 舊的和新的。

Liquibase是一個很棒的圖書館,http://grails.org/plugin/database-migration很受歡迎,因此很容易獲得對這兩者的支持。一旦你的模式在某種程度上穩定下來後,你就應該考慮使用插件了。