4

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

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

4

1 回答 1

10

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

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

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

于 2012-07-12T04:47:07.947 回答