2011-02-23 50 views
1

我正在尋找當Hibernate自動更新表時獲取SQL更新腳本的方式。從Hibernate獲取SQL腳本更新

我在開發環境中只使用hibernate.hbm2ddl.auto=update,我需要SQL腳本來更新生產表。

我希望這些SQL腳本能夠以txt格式進行修改和編輯。

這怎麼辦? 感謝您的任何建議。

回答

2

有一些建議和一般性討論here

簡而言之,您可以打開日誌(標準輸出):

hibernate.show_sql=true 

或者,如果你使用log4j的,你可以將它添加到您的log4j.properties文件:

log4j.logger.org.hibernate.SQL=DEBUG 

這兩種方法都將輸出Hibernate的準備好的語句和參數(因此參數值本身不是內聯的)。爲了解決這個問題,你可以使用攔截器,如P6Spy。關於這方面的細節可以在here找到。

+0

謝謝,我不知道Hibeernate日誌這個也是。 – 2011-02-23 17:18:10

0

org.hibernate.cfg.Configuration類有方法:

public java.lang.String[] generateSchemaUpdateScript(Dialect, DatabaseMetadata) 


什麼產生reqiured更新腳本。

我剛剛實現了這個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. 


(我不得不implent是作爲一種服務,因爲我們有外部域模型)