powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
19 сообщений из 19, страница 1 из 1
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243296
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветсвую!
в "Java Persistence with Hibernate" P.64 прописано:
WARNING: We've seen Hibernate users trying to use SchemaUpdate to update the schema of a production database automatically. This can quickly end in disaster and won't be allowed by your DBA
Хотелось бы узнать поподробнее , какие именно траблы/проблемы могут возникнуть (или возможно возникали у кое-кого из участников sql.ru при попытке....
1. актуализации схемы БД на БД заказчика
2. актуализации схемы БД у разработчиков

В чем атомный ужос hibernate.hbm2ddl.auto=update на БД заказчика, если предварительно сия БД была пробекапена и возможно откатиццо на пред. версию в крайнем случае.

В новом проекте захотелось прикоснутся к революции в виде ORM Hibernate;-)

Разработка ведется на основе ваяния сущьностейя и затем генерирования на их основе табличечег в БД. В БД ручками пока не лезем, все полагаемся на магию Hibernate;-)

P. S пока что в проектах вообще по старинке SQL, SQL-deltas накатывали изменения
OR
/ использовали самопальные разработки, где изменения схемы в программе прописывались и потом накатывались



Спасиб за ответы
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243314
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, ну сколько можно рассказывать. hbm2dll, лишь, инструмент чернового прототипизирования. Он не умеет создавать все возможные констрейнты и индексы, которые нужны базе. Он не умеет всегда правильно добавлять апдейты, чтобы не удалить существующие данные. И уж, тем более, он не покрывает сотни сценариев, когда апдейт требует специальной логики конвертации.
Забудьте про эту фичу hibernate. Смотрите в сторону liquibase
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243316
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: если вы не понимаете всю "магию" hibernate, то лучше не трогайте его вообще. Там масса тонкостей, и если вдруг его использовать не так как задумано мануалом, то можно поплатиться.
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243366
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczБлин, ну сколько можно рассказывать. hbm2dll, лишь, инструмент чернового прототипизирования. Он не умеет создавать все возможные констрейнты и индексы, которые нужны базе.
Не жду магии до такой степени, - Буду Creating custom constraints читать, аннотации сажать.

BlazkowiczОн не умеет всегда правильно добавлять апдейты, чтобы не удалить существующие данные.
О, это уже весомо конечно, - т.е миграцию данных не прописать (как то хочу шоб данные из "старого" поля вуася (varchar(16) )писались в поле пуопкин (varchar(36) и добавлялось в поле пуопкин еще "это-он" ?

BlazkowiczЗабудьте про эту фичу hibernate. Смотрите в сторону liquibase
Да уж смотрел. начал.
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243493
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конвертировать базу - в общем случае нет, но посмотрите, а что там за конвертация? В большинстве случаев это добавление новых сущностей или полей, и hibernate с этим вполне справляется, по крайней мере, достаточно точно угадывает
- таблицу добавить, поле - может
- PK, FK - пожалуйста. Конечно, без каскадов, и понятно почему - не все сервера это умеют. Но в самом hibernate все эти cascade имеются, и если ваше приложение - единственный клиент базы, то какая разница?
- индекс создать - тоже пожалуйста.
Так что не все так плохо. JBPM, JBoss, JBoss Portal - именно так свои базы и поднимают. Просто надо четко понимать, что происходит с базой при hibernate.hbm2ddl.auto=update. Желательно также предварительно прогнать такое обновление на тренировочной базе с включенной трассировкой SQL.

А насчет приведенных предупреждений - опасность действительно есть, например, если в базе используются особенности сервера/конкретного диалекта.
- триггеры/процедуры
- поля какого-то особого типа, особенно если они используются во вновь создаваемых констрейнтах
Плюс переименования/удаления полей/сущностей, но это уже от диалекта не зависит, общая проблема
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243576
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanra,

спасиб за краткий обзор. Сервером будет...tomcat. никиких там вебсфер с джебосами не будет пока
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243594
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamenjahrВ БД ручками пока не лезем, все полагаемся на магию Hibernate;-)

действительно. Как бы Вообще от БД избавиться. Как класс...Чтобы ей и не пахло.
Те кто этого действительно хотят, уже ушли на NoSQL.
Остальные - реалисты.
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243735
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123kamenjahrВ БД ручками пока не лезем, все полагаемся на магию Hibernate;-)

действительно. Как бы Вообще от БД избавиться. Как класс...Чтобы ей и не пахло.
Те кто этого действительно хотят, уже ушли на NoSQL.
Остальные - реалисты.

Если Вы - представитель реалистов, скажите/напишите - Вы дизайните БД, используя подручные средства типа Visual Paradigm али Visual Management Studio (MS SQL Server). MySQL Workbench 5.2 CE - (mysql). Али Вы пишете, что-то типа
Код: sql
1.
2.
3.
4.
USE master

GO
CREATE DATABASE myCoolDB


,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE TABLE [dbo].[CaseSensitiveTest1] (
        [UID] [int] NOT NULL ,
        [Value1] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
        [DescValue1] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO

-- Add primary key
ALTER TABLE [dbo].[CaseSensitiveTest1] WITH NOCHECK ADD
        CONSTRAINT [PK_CaseSensitiveTest1] PRIMARY KEY  CLUSTERED
        (
                [UID]
        )  ON [PRIMARY]
GO

-- Select server collation and sort information
SELECT SERVERPROPERTY('Collation'),
SERVERPROPERTY('SqlSortOrder')
GO

-- Insert test records
INSERT INTO [dbo].CaseSensitiveTest1 VALUES (1, 'TEST', 'All Upper Case')
INSERT INTO CaseSensitiveTest1 VALUES (2, 'test', 'All Lower Case')
INSERT INTO CaseSensitiveTest1 VALUES (3, 'Test', 'Mixed Case')
INSERT INTO CaseSensitiveTest1 VALUES (4, 'TEST1', 'All Upper Case')
INSERT INTO CaseSensitiveTest1 VALUES (5, 'test1', 'All Lower Case')
INSERT INTO CaseSensitiveTest1 VALUES (6, 'Test1', 'Mixed Case')
INSERT INTO CaseSensitiveTest1 VALUES (7, '123Test', 'Mixed Case')

...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243847
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamenjahr,
- если моя должность - Разработчик БД, то общие средства - ErWin
+ штатные средства БД (оракл - PSQLDeveloper, сиквел - профайлер и т.д.)
- если должность Программист, то я готовлю для админа БД заазчика скрипты по версиям в паре (апдейт на старшую, откат на младшую).
Все скрипты в папках:
6.0.0 server\
6.0.2 server\
6.0.3 server\
6.0.4 server\
6.0.5 server\
внутри пара файлов...батник + sql
1.sql
start.bat

Админ заказчика ничего кроме текстовых скриптов не примет, т.к. башкой отвечает за работоспособность БД после апдейта исполнителя версии.
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243850
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В "продакшене" за БД обычно вообще отвечает отдельная команда, могут присутствовать индексы, доп. поля, о которых ваше приложение знать не должно. Удаление полей так же не приветствуется, вдруг там чо. Скрипты апдейта версий гоняют вручную. Автоматом можно разве что в каких-то мелких не-бизнес проектах, где от данных не завист миллионы денег и судьбы некоторого кол-ва живого персонала )
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243862
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут с презентации ещё одна тулза проскочила - dbdeploy.
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243867
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лагман,
+1
автор(c) Ааз (форум sql.ru - Oracle)
Member
Откуда: Протвино
Сообщений: 4112
===================================================

- Разработчик на своей девелоперской БД (например, очень недавний бэкап промышленной) отладил скрипт.

- DBA на тестовой (куда девелоперам доступа нет) тупо запустил скрипт и проверил отсутствие ошибок.

Запустил туда админа приложения для проверки функционала.

- Запланировали downtime или ограниченную доступность сервисов. DBA подготовил возможность отката (standby с задержкой наката redo подойтёт).

- В момент «Ч» DBA прогнал проверенный скрипт и пустил админа приложения проверить основной функционал.

Если ОК - пущаем в продакшн. Если не Ок, откатываемся на запасные путя и предоставляем начальству удовольствие оттра**** разработчика или администратора приложений (по выбору).
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38243934
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все верно - если заказчик может содержать не только DBA, а и целую команду - лучше отгрузить им скрипт, и пусть отрабатывают свой хлеб. Такой заказчик и за работу заплатить не пожалеет: отдельно за схему в erwin, отдельно за sql-скрипт, отдельно - за доработку классов/мэппингов. И такой заказчик может быть и рад сделать автоматический апдейт, но не может, так как регламент.
Бывают и другие заказчики, которые удавятся за копейку, либо это вообще массовое производство. Таким надо, чтобы за минимальную цену запустил - и заработало. Вот тут как раз hibernate.hbm2ddl.auto=update. Проектируем только объектную модель, и, может быть, индексы для оптимизации, и не делаем двойную/тройную работу по цене 1.
В моем опыте был еще и 3 вариант - разворачивание новой базы и перекачка данных. Но это для тех, у кого базы относительно небольшие, либо можно подождать.

И все-таки по теме. Хибернейт он что может? Да не так и много
Код: plsql
1.
2.
3.
CREATE TABLE ...
ALTER TABLE ADD(FIELD / CONSTRAINT)
CREATE INDEX ...


Ну, допустим, зарезервировал заказчик имена каких-то полей / таблиц - так тут что hibernate, что скрипт - в одинаковых условиях: если вы про эти поля не знаете заранее, то в любом случае получите ошибку.
А в остальном понимаем: если достаточно для апдейта этих команд, так зачем тогда делать лишнюю работу?
Что из приведенных выражений может повредить базе? Я вижу только одну опасность: dba или кто там еще был достаточно сообразителен, чтобы написать там процедуры/триггеры/view, но недостаточно сообразителен, чтобы не использовать в них выражения типа
Код: plsql
1.
2.
select *
join с выборкой полей без алиасов


Какие тут еще могут быть опасности?
Вопрос-то у автора был именно чего следует бояться, а не что может/не может hibernate
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38244600
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
тут вот есть таблица с возм.тузлами
http://flywaydb.org/
Код: plaintext
Flyway 	Liquibase 	c5-db-migration 	dbdeploy 	mybatis 	MIGRATEdb 	migrate4j 	dbmaintain 	AutoPatch
тут -Flyway против Liquibase ;-)
http://stackoverflow.com/questions/8418814/db-migration-tool-liquibase-or-flyway
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38244601
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanra,
Возможно зависит от сложнонавороченности изменений в БД да и самой БД (кол-во таблиц например , кол-во столбцов)
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38244615
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123kamenjahr,
- если моя должность - Разработчик БД, то общие средства - ErWin
+ штатные средства БД (оракл - PSQLDeveloper, сиквел - профайлер и т.д.)
- если должность Программист, то я готовлю для админа БД заазчика скрипты по версиям в паре (апдейт на старшую, откат на младшую).
Все скрипты в папках:
6.0.0 server\
6.0.2 server\
6.0.3 server\
6.0.4 server\
6.0.5 server\
внутри пара файлов...батник + sql
1.sql
start.bat

Админ заказчика ничего кроме текстовых скриптов не примет, т.к. башкой отвечает за работоспособность БД после апдейта исполнителя версии.
Ясно, а теперь представьте себе, что бывают разработки, где программисты вообще не знают и не ведают, что такое sql-скрипт. И че такое таблица там или вьюха -тоже не ведают. Когда надо разработать очередное приложение, то дизайница ER диаграмма на бумаже там или в о ужос ворд-документе (но это чисто для документации концепции/реализации). Затем создаюццо некие абстракции уж в среде разработки (наподобие сущностям /слабым сущностям в БД). При этом однако назначаются PK/FK/BK (бизнес-ключ). А также индексы. Ну и ессно связи с другими сущностями. Затем запускаеццо тузла, которая генерит нечто подобное доменным объектам -ява-классам, а также мепперы т.н. А также классы версий - где отображены аттрибуты сущности в зависимости от версии с.хемы БД.

Если по ходу админы вдрух видят, что нужны те-то или те-то индексы - они добавляютццо.

Вот такое захотелось иметь, юзая ORM стандартный и начиная разработку с ява.классов хотя бы, а не с дизайна таблицечек в БД
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38244633
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamenjahrЯсно, а теперь представьте себе, что бывают разработки, где программисты вообще не знают и не ведают, что такое sql-скрипт.
верю что они не занют что такое реестр в винде, HTML и JS.
Это ведь тоже не Java.
...
- Требуется сделать апдейт поля ФИО одной строкой на 3 поля Ф, И и О.
- Требуется выделить из поля Адрес в виде одной строки - сущность в виде класса.
Как будем делать не зная что такое скрипты\таблицы\SQL выражения? А первая версия уже в продакшене?
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38244739
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманВ "продакшене" ... могут присутствовать индексы, доп. поля, о которых ваше приложение знать не должно.
А вот это потенциальная жопа. В базу ничего не должно попадать мимо контроля версий, иначе кто будет отвечать если в продакшене возникнут ошибки не воспроизводимые в тестах или у разработчика ?
Знаю компанию где на все обновления процедур повешен триггер который сравнивает новый код с svn. Если отличаются, то изменение отбрасывается. На схему правда такой скрипт придумать не смогли, ограничились административными мерами. Команды DROP, CREATE, ALTER в продакшн криминал, если проходят мимо svn.
...
Рейтинг: 0 / 0
hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
    #38244990
kamenjahr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Petro123верю что они не занют что такое реестр в винде, HTML и JS.
Это ведь тоже не Java.

Ну что такое знать-то знают, другое дело, что глубоко и не копают т.к. им это по работе не встало. Зато те, кто прекрасно знают, что такое java script & jquery & Co стайтмент написать смогут вряд ли (вспоминать придеццо)
...
[/quot]

Petro123- Требуется сделать апдейт поля ФИО одной строкой на 3 поля Ф, И и О.
-

1.
Проблема решаема без уп. знаний в той разработке, т.к. я уж говорил, что нечто подобное сущностям есть в той разработке.
Есть классы мепперы версии ИКС, где Ф.И.О в одном аттрибуте. Программер сгенерировал новую версию ИКС+1 мепперов, где три аттрибута . Ф-, И,.О.
Затем он пишет update_ программу для миграции с ИКС=> ИКС+1. Затем он запускает тузлы, которые миграцию выполняют у него локально.

Petro123 Требуется выделить из поля Адрес в виде одной строки - сущность в виде класса.
Как будем делать не зная что такое скрипты\таблицы\SQL выражения? А первая версия уже в продакшене?

2.

В той разработке есть такие темы как субсущность как аттрибут сущности. Схема апдейта та же как и в 1. случае .

Теперь про продакш: в той разработке имеются инсталлеры, которые заливают обновления схемы БД исползуя те самые мепперы классов. Ессно первейшее требование - наличие бэкапа со стороны заказчика.

P.S но все это: огромный велосипед, который замутили еще в конце 90х 20г0 века. И использовать сей велосипед в других разработках низзя
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate.hbm2ddl.auto=update - причины запрета актуализации схемы БД на БД заказчика
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]