2013-05-28 60 views
3

我使用Hibernate租賃和每次用戶日誌我正在將數據庫更改爲他的用戶名(SQLite)。可悲的是,有時數據庫不存在,我需要創建它。如何在運行時在Hibernate中創建數據庫?

的問題是,我不知道如何在運行時創建的數據庫中所有表。

通常Hibernete分貝這爲我:

<property name="hibernate.hbm2ddl.auto">update</property> 
+0

從頭開始創建一個新的'SessionFactory',就像創建初始的''一樣嗎? – millimoose

+0

session = sessionFactory.withOptions()。tenantIdentifier(「tenancy_id」)。openSession(); < - 但我應該添加這個? – MAGx2

+0

我不認爲打開會話時數據庫更新會運行。它在您創建'SessionFactory'時運行。在切換數據庫時,您必須擺脫舊工廠,並重新創建它。我不知道*在哪裏做這件事,因爲我不知道你在做什麼*現在*。 – millimoose

回答

2

可以使用的SchemaExport此出口要在新創建的數據庫中創建您創建的數據庫之後的實體。基本步驟如下。如何獲得配置的屬性並不重要。

Configuration config = new Configuration(); 
    config.addAnnotatedClass(Class1.class); 
    config.addAnnotatedClass(Class2.class); 
    config.addAnnotatedClass(Class3.class); 
    <set all hibernate properties/datasource here> 
    SchemaExport schema = new SchemaExport(config); 
    schema.create(true, true); 

的Javadoc在這裏:http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/tool/hbm2ddl/SchemaExport.html

對於設置UPT配置的選項,看這裏。 http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/cfg/Configuration.html

編輯: 我想這必須添加的是,它被認爲是不好的做法,讓Hibernate在生產環境中處理DB /模式/表創建的話。根據需要和可行性,爲此可以更好地保存準備好的SQL語句,甚至可以通過數據庫管理員進行手動操作。但因爲我們都很懶惰,我猜這種情況不會經常發生。 ; d

+0

我可以從hibernate.cfg.xml獲取我的類嗎?像config.loadAnnotatedClassFromXML()? – MAGx2

+0

是的。只需從這裏選擇最適合您的方法即可:http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/cfg/Configuration.html。你可能想看看addClass()或addFile()。 – Carsten

4

你嘗試的價值create代替。

create的值將在sessionFactory創建時創建您的表,並保留它們的完整性。

創造降的值將創建表,然後把它們當您關閉SessionFactory的。

這將是

<property name="hibernate.hbm2ddl.auto">create</property> 

更多infornation herehere
或者有可能是一個dialect problem

+0

問題是數據庫是在運行時創建的(我正在使用維護) – MAGx2

3

您可以通過在數據庫連接URL添加createDatabaseIfNotExist=true參數在運行時創建數據庫。

欲瞭解更多信息,請檢查SO Link

相關問題