Инструменты гибернации и постоянно меняющаяся база данных

В настоящее время я использую Hibernate Tools 3.1; Я настроил соглашение об именах и шаблоны DAO. База данных (SQL Server 2005) находится на ранней стадии разработки, и я отвечаю за восстановление сопоставлений, сущностей, DAO, конфигурации и т. д. Каждый раз, когда мне приходится реконструировать таблицы, я теряю все настройки, сделанные мной в сопоставлениях (файлы * .hbm.xml), такие как настройка столбцов личность, выбор полей, используемых в равно и нанизывать. Я собирался записать diff XML в файл и «слить» его с созданным отображением (см. мой связанный вопрос), но мне было интересно ... есть ли какой-нибудь лучший метод / инструмент для решения этих раздражающих, неизбежных, критических задач?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
659
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я настоятельно рекомендую отказаться от постоянного обратного проектирования. Обратный инжиниринг - отличная одноразовая вещь, но изменениями нужно управлять как изменениями как в hbm, так и в базе данных.

Мы используем миграции для управления изменениями базы данных и включаем связанные изменения в файл hbm. Если он есть в Hibernate (я считаю, что он есть), вы можете изучить аннотации, а не hbm, их может быть немного проще поддерживать.

Вы - и мои недавние злоключения - убедили меня, что RevEnge лучше всего подавать холодным. Спасибо.

Manrico Corazzi 19.09.2008 01:16

Это опоздание на два с половиной года, но я выскажу особое мнение. Вы должны иметь возможность вносить любые необходимые изменения в файлы сопоставления с помощью файла hibernate.reveng.xml или пользовательской ReverseEngineeringStrategy. Что касается самих классов, вы всегда должны генерировать базовые классы и расширять их классами, содержащими собственный код.

Например, сгенерируйте com.company.vo.generated.CustomerGenerated и дополните его com.company.vo.custom.Customer. Генерация кода должна перезаписывать все классы в сгенерированном пакете, но никогда в настраиваемом пакете (хотя вы можете заставить Hibernate Tools генерировать эти настраиваемые классы в целевом каталоге, чтобы вы могли копировать и вставлять пробелы в настраиваемый каталог по мере необходимости). Таким образом, вы можете переопределить методы для equals, toString и т. д. В пользовательских классах и не потерять свои изменения при регенерации. Также обратите внимание, что лучше всего не возвращать сгенерированный код в SCM.

На этом сайте есть несколько отличных примеров того, как добиться этого с помощью Maven, плагина Hibernate3 и плагина помощника по сборке. На большинство из них есть очень полезные ответы Паскаля Тивента. Этот метод прекрасно работает для меня, и, хотя есть некоторая кривая обучения, замечательно иметь возможность передавать изменения базы данных в приложение с помощью одной команды Maven.

Другие вопросы по теме