Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top