Hibernate: DDL <-> Классы, в каком направлении? - PullRequest
4 голосов
/ 14 декабря 2011

Какой, по вашему мнению, «правильный» способ использовать Hibernate?Разработать модель на уровне объекта (классы), а затем создать из нее DDL?Чтобы спроектировать модель на реляционном уровне (таблицы) и затем сгенерировать из нее классы?

Каковы плюсы и минусы каждого метода?

В случае, если сначала создается DDLВы генерируете классы из него, а затем можете добавить некоторый код в классы. Что происходит, например, когда вы хотите добавить новый столбец в таблицу, вы должны соответственно изменить класс.Вручную?Предоставляет ли Hibernate инструмент для изменения класса без его полной регенерации (без удаления пользовательского кода)?

Спасибо

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

Я предпочитаю следующий подход:

  • На ранних этапах проекта вы разрабатываете классы и генерируете из них DDL, чтобы вы могли легко менять модель своего домена так часто, как вам нужно.

    Однако при разработке модели предметной области вам все равно нужно помнить о схеме базы данных, чтобы избежать создания модели, которая привела бы к неэффективному доступу к базе данных.

  • По мере развития проекта и стабилизации модели предметной области вы можете начать поддерживать схему базы данных как отдельный артефакт. Это упрощает тонкую настройку индексов и ограничений.

    На этом этапе вам необходимо поддерживать синхронизацию схемы с моделью домена вручную, но это необходимо в любом случае, поскольку автоматические обновления DDL, предоставляемые Hibernate, недостаточно надежны для использования в производственной среде, поэтому вам необходимо отслеживать изменения и напишите для них скрипты миграции.

2 голосов
/ 14 декабря 2011

Я бы сначала сгенерировал классы домена, а затем использовал Hibernate для создания DDL.

Это потому, что это позволяет вам указать ассоциации между таблицами (ManyToOne и т. Д.), Которые приведут к созданию соответствующих внешних ключей.Вы также можете использовать аннотации для указания уникальных индексов, которые будут отражены в сгенерированном DDL.

Однако, если ваш проект стабилен, вы не должны использовать hibernate для обновления схемы после изменений в классе вашего домена.

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