Какова удобная стратегия обновления схемы для добавления свойства @NotNull в существующую модель домена в контексте спящего режима? - PullRequest
0 голосов
/ 10 января 2020

В настоящее время я разрабатываю небольшое приложение Java с помощью Spring Boot и Hibernate. По мере развития моего приложения, меняется и модель предметной области. В последний раз я сталкиваюсь с частыми обновлениями моей доменной модели - в существующие таблицы добавляются новые столбцы. Это добавление нового столбца происходит не вручную, а автоматически через настроенное свойство hibernate.ddl-auto=update, как только я ввожу новую переменную класса (поле) в свой класс сущностей.

Проблемы появляются, как только я добавляю новую аннотацию @NotNull одновременно с введением нового поля, что неудивительно: в старых записях таблицы не может быть допустимых данных в новом столбце без дальнейших действий следовательно, все обновление может привести к повреждению базы данных в случае успеха. Особенно тогда, когда hibernate сначала обновляет таблицу (установив ограничение @NotNull для столбца), но затем обнаруживает, что большая часть данных в этом столбце недопустима (null). Из-за hibernate.ddl-auto=update поврежденный столбец не может быть восстановлен с помощью простого отката свойства @NotNull во вновь введенном поле (т. Е. Если я закомментирую эту аннотацию и запущу приложение еще раз). По этой причине я вынужден отбросить всю таблицу с поврежденными данными в такой ситуации, что определенно не подходит для правильной работы, особенно вне среды разработки.

Поэтому мой вопрос: Есть ли способ обновить существующую модель предметной области, чтобы ограничение @NotNull не создавало таких проблем для вновь создаваемых полей? Каковы рекомендации для такого рода обновлений схемы, особенно если я хочу избежать ручного обновления всей схемы базы данных и хочу больше полагаться на создание схемы гибернации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...