如果我有一个Grails应用程序,我已经习惯将一些域对象保存到我的数据库(在这种情况下是MongoDb,但可能没关系),并且我修改了我的域类,比如我添加了一些属性或者采取了一些属性远。现在,具有较新版本的域类的应用程序的修改版本是否仍然可以识别已经保留的旧版本的域实例?
更重要的是,如果我现在使用新版本的域类重新启动Grails应用程序,它会删除(或做任何事情)已经保留的旧版本的域对象吗?我正在尝试追逐我面临的类似问题,但我在一个团队中,所以我不确定应用程序是否从数据库中删除了旧对象(我不这么认为)或者做了一些人类系统用户。
答案 0 :(得分:1)
Grails处理数据库的方式取决于DataSource.groovy中dbCreate属性的值。
如果您声明
dataSource {
dbCreate = "update"
}
然后,您添加到域类的任何其他属性都将作为列添加到数据库中。请注意,这不会删除任何已存在的列。所以说你有一个名为x的属性并想用一个名为y的属性替换它,这会在数据库中创建一个y列,但x列仍然会保留。
此处列出了dbCreate
的可能值和行为创建 - 删除现有架构。在启动时创建模式,首先删除现有表,索引等。
create-drop - 与create相同,但在应用程序完全关闭时也会删除表。
update - 创建缺少的表和索引,并在不删除任何表或数据的情况下更新当前架构。请注意,这无法正确处理许多架构更改,例如列重命名(您将使用包含现有数据的旧列留下)。
验证 - 不对数据库进行任何更改。将配置与现有数据库架构进行比较并报告警告。
任何其他值 - 什么都不做
希望这有帮助