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