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)
}
}
答案 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>