2012-09-15 7 views
4

Я позволю hbm2ddl создать таблицы для меня (для целей dev), а столбцы находятся в обратном порядке полей в классе.Hibernate: порядок обратных столбцов по hbm2ddl

Как я могу создать столбцы в том же порядке, что и класс?

Я думаю, что классы Java не хранят порядок полей, поэтому Hibernate просто не знает, что такое порядок в источнике (что кажется логичным, если я думаю о более сложных случаях).

Но могу ли я хотя бы попросить Hibernate поставить столбцы PK и FK как первые?

Hibernate 4.0.0 (JBoss AS 7.1.2) MySQL 5.1.x

+0

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

+0

Я создал [HHH-7612] (https://hibernate.onjira.com/browse/HHH-7612), чтобы ответить на второй вопрос. –

+0

Старая резьба и хороший ответ принят, но похоже на обман http://stackoverflow.com/questions/5964714/maintain-the-order-of-column-when-creating-a-new-table-using-hibernate – bphilipnyc

ответ

6

Hibernate команда говорит, что это known limitation и это невозможно установить порядок. Но вы не должны полагаться на hbm2ddl при использовании Hibernate в производстве, это довольно ограниченная вещь, например, он может добавить столбец, но он не может его удалить. Вместо этого люди обычно создают миграции БД с помощью таких инструментов, как LiquiBase или FlyWay или DbDeploy, что дает вам больше гибкости и контроля над обновлениями схемы.

Чтобы описать, как этот подход помогает: допустим, у вас есть среда UAT, и вы только что обновили схему - вы хотите добавить ограничение не null для существующего столбца. С hbm2ddl это невозможно, и вы заставите свой QA воссоздать базу данных с нуля. Используя описанные выше инструменты, вам нужно будет добавить файл SQL, и эти инструменты запустит этот новый скрипт, который обновит схему соответственно. Вы также можете установить hbm2ddl = verify, чтобы убедиться, что существующая схема базы данных обновлена ​​или наоборот - отображение Hibernate корректно.

 Смежные вопросы

  • Нет связанных вопросов^_^