Почему при изменении свойств сопоставления в домене не создаются новые строки журнала изменений?

class Donation {

    BigDecimal amount

    static constraints = {
        amount min: BigDecimal.ZERO
    }

    static mapping = {
    }

}

После добавления домен выглядел так:

class Donation {

    BigDecimal amount       

    static constraints = {
        amount min: BigDecimal.ZERO
    }

    static mapping = {
        amount scale: 4
    }

}

После внесения изменений я запустил dbm-gorm-diff в консоли Grails, но он не напечатал дополнительных строк журнала изменений. Мне было интересно, не приведет ли изменение сопоставления к новым строкам журнала изменений. Но глядя на тип данных «количество» в базе данных mysql, он показал десятичное число (19,2). Я думал, что масштабирование 4 изменит тип данных на десятичный (19, 4). Я ценю любую помощь в этой дилемме. Спасибо!


person kofhearts    schedule 31.08.2015    source источник


Ответы (1)


В то время как db-migration может обнаруживать изменения в ваших доменах и может генерировать желаемый журнал изменений для обновления схемы вашей базы данных. Он недостаточно умен, чтобы постоянно находить правильные изменения. В частности, когда вы переименовываете таблицу/столбец или меняете тип данных столбца. В таких сценариях вам необходимо выполнить миграцию вручную.

Создайте журнал изменений вручную для обновления схемы с помощью db-migration:

databaseChangeLog = {

    changeSet(author: "sandeep (manual)", id: "20150901124635-01") {
        modifyDataType(columnName: "amount", newDataType: "decimal(19,4)", tableName: "donation")
    }
}

Поэтому всегда после создания журнала изменений проверяйте, содержит ли он правильные изменения или нет.

person Sandeep Poonia    schedule 01.09.2015
comment
+1 и добавить автоматическое тестирование. У вас ДЕЙСТВИТЕЛЬНО есть тесты домена, которые работают с вашими структурами после миграции, чтобы проверить правильность миграции, не так ли ??? - person railsdog; 01.09.2015