使用Grails处理旧数据库时,如何避免自动架构修改?

时间:2010-12-31 00:50:26

标签: grails

Grails在更改域模型时会自动进行架构修改(包括索引/外键更新)。这通常很好,但在使用旧数据库时,我想完全禁用所有表修改。

如何指示Grails never 修改表结构(包括索引和外键约束)?

这就是我目前设置映射的方式:

class ClassName {
  String string1
  String string2
  AnotherClass anotherClass

  static mapping = {
    version(false)
    table("legacy_table")
    string1(column: "some_legacy_field_1")
    string2(column: "some_legacy_field_2")
    anotherClass(column: "another_class_id", nullable: true, ignoreNotFound: true)
  }
}

2 个答案:

答案 0 :(得分:9)

dataSource中定义的/grails-app/conf/DataSource.groovy具有dbCreate属性,可以设置为validate以检查架构是否与域模型匹配,而不以任何方式更改它

此处有更多详情: http://grails.org/doc/latest/guide/3.%20Configuration.html#3.3%20The%20DataSource

答案 1 :(得分:2)

如前所述,属性dbCreate是用于指定每次在Domain类中进行更改时数据库将如何更改的属性。我建议完全按照Burt的建议删除此属性,因此Hibernate不控制数据库的更新方式,因为这可能会导致某些冲突,具体取决于您对域类所做的更改。

我在项目中管理数据库更改的方式是使用数据库迁移,我建议使用Liquibase,Grails插件可以完美运行,易于使用并提供极大的灵活性。 / p>