【问题标题】:Does removing a property from a domain class cause an automatic update to the schema, whereby the corresponding column is dropped?从域类中删除属性是否会导致架构自动更新,从而删除相应的列?
【发布时间】:2012-07-12 04:26:40
【问题描述】:

我是 Grails 的新手。我已经使用它了一点,但没有那么多。不过,我对 Java 很熟悉。我的问题是关于模式更新。我知道 Grails 通过查看域类来创建 Hibernate 映射,因此如果我添加一个新属性,Grails 将自动在数据库中为该属性添加一个列。反过来也成立吗?如果我删除一个属性,该列是否会被删除?我没有看到这种行为,所以我想知道这是否是配置问题。

如果我想进入更强大的数据库管理,我猜我将不得不使用数据库管理插件或类似 Liquibase 的东西。不过,我正在进行的项目非常简单,目前我们还没有决定是否朝那个方向发展。

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    这取决于您在DataSource.groovy 中的dbCreate 设置。如果它是createcreate-drop,那么当您重新启动时,一切都会重建。如果是update,则会添加新的表和列。如果是其他设置,则不会进行任何更改。

    update 并没有达到大多数人的预期。这是悲观的,不会做出可能导致数据丢失或损坏的更改。所以它不会改变列的大小,即使它更宽(例如VARCHAR(50) -> VARCHAR(200))。它不会添加索引。它将添加一个指定为非空的新列,但它会将其添加为可为空的,否则之前插入的行将无效。但它不会删除列或表。因此,您很容易遇到这样一种情况:重命名一列并最终得到两个 - 旧的和新的。

    Liquibase 是一个很棒的库,http://grails.org/plugin/database-migration 很受欢迎,因此很容易获得两者的支持。一旦你的架构稍微稳定了,你就应该考虑使用该插件。

    【讨论】:

      猜你喜欢
      • 2021-04-03
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多