本文作者:蘇生米沿
本文地址:http://blog.csdn.net/sushengmiyan/article/details/50445936
你可以將如下三種類型的腳本綁定到hibernate的schema生成程序中:
1.當schema生成的時候,創建腳本create就會執行。一個自定義的創建腳本可以在hibernate自動生成腳本之前,之後,甚至可以直接替換。換句話說,你可以寫一個SQL腳本,這個腳本從你的映射元數據中在hibernate生成表、約束之前或之後運行。
2.Drop語句,在hibernate移除schema的時候執行。像create腳本一樣,drop語句可以在自動生成之前之後或者直接替換hibernate的自動生成語句。
3.Load語句,總是在hibernate生成schema之後纔去執行,作爲生成的最後一步,它的主要目的就是導入你的程序運行之前的測試或者主數據。它可以包括任何形式的SQL語句,包括想alter這樣的DDL語句,如果你想進一步優化自定義你的schema的話。
這個自定義已經是事實上的標準了,你可以使用JPA的persistence.xml來配置這個持久化單元屬性。
①.默認情況下,hibernate期望一個SQL語句佔一行。啓用多行語句就靠第一個轉換了。你可以實現自己的org.hibernate.tool.hbm2ddl.ImportSqlCommondExtractor 如果你想要根據你自己的不同的方式來處理SQL腳本的話。
②.這個屬性定義了何時你創建或者銷燬腳本會被調用。你自定義的腳本將會包括CREATE DOMAN語句,它必須要在表創建使用這些DOMAIN的之前被創建。有了這些設置,schema生成器就在ORM元數據讀取之前執行這個創建語句。Drop語句就是在hibernatedrop表的時候給你了一個清楚你創建的數據的機會。
③.這是SQL腳本的位置,路徑是從classpath開始算的。
④.這是drop語句的位置所在。
⑤.這個腳本在表創建之後執行。
我們提及過,DDL是跟產品特性掛鉤的,如果你的產品支持多種數據源,你就需要設置各種的方言。你可以通過多個持久化單元的方式來解決這個問題。