Мы создали собственный инструмент, который создает необходимые отбрасывания столбцов и таблиц базы данных и добавляет эти отбрасывания в SQL, сгенерированный для обновлений базы данных. Но мы должны были добавить некоторые дополнения к генерации SchemaUpdate, чтобы заставить его работать:
- Нам пришлось добавить проверки для ненулевых свойств. Это включает в себя выполнение оператора UPDATE для данных, чтобы по возможности исключать значения NULL, что приводит к следующей точке значений по умолчанию.
- Нам пришлось добавить проверки для значений столбцов по умолчанию. Значения по умолчанию определяются обнуляемостью столбца и его типом данных. Примитивы всегда инициализируются нулями или ложными, ненулевые перечисления равны первому значению перечисления, но для других объектов скрипт должен быть изменен вручную.
- Мы даже добавили поддержку изменения размера столбцов varchar, потому что были случаи, когда длина столбца базы данных и
@Column(length)
отличались.
Но, если сложить все вместе, полный инструмент не может быть создан таким образом, потому что, если столбец переименован в коде? Что, если тип изменяется не автоматически конвертируемым образом (bool to date?). Если у вас нет доступа к истории рефакторинга, вы не всегда можете распространять изменения.