Запускать код после обновления базы данных Hibernate? - PullRequest
2 голосов
/ 28 октября 2010

Есть ли способ зарегистрировать какой-либо SchemaExportEventListener (это имя, которое я выбрал) в Hibernate, чтобы после того, как он сгенерировал DDL, мы могли сделать некоторые обновления (которые Hibernate не поддерживает) для базы данных?

Нам нужно установить независимое от регистра уникальное ограничение для столбца PostgreSQL, и хотя это вполне возможно в PostgreSQL, это не представляется возможным в аннотациях Hibernate / JPA (ни @Table(uniqueConstraint), ни @Column(columnDefinition), ни @Column(unique) делай то, что мы хотим).

1 Ответ

3 голосов
/ 29 октября 2010

Есть ли способ зарегистрировать какой-нибудь SchemaExportEventListener (это имя, которое я выбрал) в Hibernate

Насколько мне известно, Hibernate не имеет ничего подобного.

чтобы после генерации DDL мы могли сделать некоторые обновления (которые Hibernate не поддерживает) для базы данных?

Однако здесь может помочь функция import.sql. С Hibernate вы можете поместить файл import.sql в корень пути к классам, и он будет выполнен после генерации схемы (при условии, что вы используете create или create-drop). Цитировать Rotterdam JBug и блог Hibernate import.sql :

import.sql: легко импортировать данные в ваши юнит-тесты

Hibernate имеет изящную маленькую особенность это сильно недокументировано и неизвестно. Вы можете выполнить скрипт SQL во время создания SessionFactory сразу после схемы базы данных поколение для импорта данных в свежем база данных. Вам просто нужно добавить файл с именем import.sql в вашем классе root и установите либо create, либо create-drop как твой hibernate.hbm2ddl.auto собственность.

Я использую его для Hibernate Search в Действие теперь, когда я начал запросить главу. Это инициализирует мой база данных со свежим набором данных для мои юнит-тесты. JBoss Seam также использует его много в разных примерах. import.sql это очень простая функция но довольно полезно во время. Помните что SQL может зависеть от ваша база данных (ах переносимость!).

#import.sql file
delete from PRODUCTS
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...');
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');

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

Это должно удовлетворить ваши потребности.

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