Grails - Обновление домена после запуска - Я потеряю свои данные? - PullRequest
0 голосов
/ 28 апреля 2010

Я на полпути к написанию моего первого приложения Grails. Пока все идет хорошо, но я только что понял, что когда я начну жить, я не смогу так сильно изменить модель предметной области.

Приложение поддерживается базой данных MySql, в настоящее время у меня есть только один интересующий объект «Персона». Если после развертывания я хочу добавить «групповой» домен, чтобы у человека было много групп, что мне нужно будет сделать с базой данных? Потеряю ли я какие-либо существующие строки в базе данных MySQL?

Как люди обычно справляются с этой ситуацией? Есть ли умный способ создания моих доменов или простой инструмент для управления добавлением столбцов в таблице MySql?

V1

class Person {      
  String firstName;      
  String lastName;      
  String email;      
  String phoneNumber;    
}

V2 * * +1010

class Person {
  static hasMany = [groups:Group]
  String firstName;      
  String lastName;      
  String email;      
  String phoneNumber;    
}

С уважением,

Гав

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

В процессе работы вы хотели бы убедиться, что Grails не изменяет вашу схему БД. Большинство людей справляются с этим, моделируя ваши обновления в процессе разработки, а затем создавая сценарии обновления SQL для обновления рабочей базы данных и применения их непосредственно перед развертыванием. В этом случае помогает инструмент Schema Export , снабженный Grails.

Существуют также инструменты, такие как плагин DbMigrate , чтобы помочь с этими проблемами.

2 голосов
/ 30 апреля 2010

В качестве альтернативы вы можете использовать плагин AutoBase (подробнее здесь ) для Grails, основанный на LiquiBase .

1 голос
/ 28 апреля 2010

В вашем файле DataSource.groovy вы найдете конфигурации для ваших баз данных. Если вы убедитесь, что для свойства dbCreate в рабочей конфигурации задано значение «update», то все будет в порядке и не потеряйте никакие данные. Вот пример конфигурации.

        production {
            dataSource {
                    dbCreate = "update"
                    username = "user"
                    password = "pass"
                    url = "jdbc:mysql://dbmaster/databasename"
            }
        }
...