Получение сценария SQL из обновления Hibernate
Я ищу способ получить скрипт обновления SQL, когда Hibernate автоматически обновляет таблицы.
я использую hibernate.hbm2ddl.auto=update
только в среде разработки, и мне нужен сценарий SQL, который обновляет таблицы для производства.
Я хочу эти сценарии SQL в формате TXT для пересмотра и потенциального редактирования.
Как это может быть сделано? Спасибо за любой совет.
2 ответа
Есть некоторые предложения и общее обсуждение здесь.
В двух словах, вы можете включить ведение журнала (для стандартного вывода):
hibernate.show_sql=true
Кроме того, если вы используете log4j, вы можете добавить это в свой файл log4j.properties:
log4j.logger.org.hibernate.SQL=DEBUG
Оба этих подхода будут выводить подготовленные операторы Hibernate с параметрами (поэтому сами значения параметров не являются встроенными). Чтобы обойти это, вы можете использовать перехватчик, такой как P6Spy. Подробности об этом можно найти здесь.
org.hibernate.cfg.Configuration
класс имеет метод:
public java.lang.String[] generateSchemaUpdateScript( Dialect, DatabaseMetadata)
что генерирует требуемый скрипт обновления.
Я только что реализовал это в Grails:
configuration = new DefaultGrailsDomainConfiguration(
grailsApplication: grailsApplication,
properties: props)
//this extends hibernate config
Connection c = SessionFactoryUtils.getDataSource(sessionFactory).getConnection(props.'hibernate.connection.username', props.'hibernate.connection.password')
<br/>md = new DatabaseMetadata(c, DialectFactory.buildDialect(props.'hibernate.dialect'))
configuration.generateSchemaUpdateScript(DialectFactory.buildDialect(props.'hibernate.dialect'), md)
)
check SchemaExport script in grails, for further information, it uses hibernate to generate schema.
(Я должен был реализовать это как сервис, потому что у нас есть модель внешнего домена)