我正在编写我的第一个grails应用程序的一半。到目前为止它确实很顺利,但我只是意识到,当我上线时,我将无法改变域模型。
应用程序由MySql数据库支持,我目前只有一个感兴趣的对象'Person'。如果在部署之后我想添加一个“组”域,那么一个Person有很多组,我将不得不对数据库做什么?我是否会松开MySQL数据库中的任何现有行?
人们通常如何处理这种情况?有没有一种聪明的方法来设计我的域或一个简单的工具来管理MySql表中的列添加?
V1
class Person {
String firstName;
String lastName;
String email;
String phoneNumber;
}
V2
class Person {
static hasMany = [groups:Group]
String firstName;
String lastName;
String email;
String phoneNumber;
}
亲切的问候,
GAV株系
答案 0 :(得分:3)
在生产中,您需要确保Grails不会修改您的数据库架构。大多数人处理此问题的方法是在开发中对更新进行建模,然后创建SQL更新脚本以更新生产数据库并在部署之前应用它们。在这种情况下,提供grails的Schema Export工具会有所帮助。
还有像DbMigrate插件这样的工具来帮助解决这些问题。
答案 1 :(得分:2)
另外,您可以使用基于AutoBase plugin的Grails的here(更多信息LiquiBase)。
答案 2 :(得分:1)
在DataSource.groovy文件中,您将找到数据库的配置。如果验证生产配置中的dbCreate属性是否设置为“update”,那么您应该没问题并且不会丢失任何数据。以下是配置示例。
production {
dataSource {
dbCreate = "update"
username = "user"
password = "pass"
url = "jdbc:mysql://dbmaster/databasename"
}
}