我使用Hibernate租賃和每次用戶日誌我正在將數據庫更改爲他的用戶名(SQLite)。可悲的是,有時數據庫不存在,我需要創建它。如何在運行時在Hibernate中創建數據庫?
的問題是,我不知道如何在運行時創建的數據庫中所有表。
通常Hibernete分貝這爲我:
<property name="hibernate.hbm2ddl.auto">update</property>
我使用Hibernate租賃和每次用戶日誌我正在將數據庫更改爲他的用戶名(SQLite)。可悲的是,有時數據庫不存在,我需要創建它。如何在運行時在Hibernate中創建數據庫?
的問題是,我不知道如何在運行時創建的數據庫中所有表。
通常Hibernete分貝這爲我:
<property name="hibernate.hbm2ddl.auto">update</property>
可以使用的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
你嘗試的價值create
代替。
create的值將在sessionFactory創建時創建您的表,並保留它們的完整性。
創造降的值將創建表,然後把它們當您關閉SessionFactory的。
這將是
<property name="hibernate.hbm2ddl.auto">create</property>
更多infornation here和here
或者有可能是一個dialect problem
問題是數據庫是在運行時創建的(我正在使用維護) – MAGx2
您可以通過在數據庫連接URL添加createDatabaseIfNotExist=true
參數在運行時創建數據庫。
欲瞭解更多信息,請檢查SO Link!
從頭開始創建一個新的'SessionFactory',就像創建初始的''一樣嗎? – millimoose
session = sessionFactory.withOptions()。tenantIdentifier(「tenancy_id」)。openSession(); < - 但我應該添加這個? – MAGx2
我不認爲打開會話時數據庫更新會運行。它在您創建'SessionFactory'時運行。在切換數據庫時,您必須擺脫舊工廠,並重新創建它。我不知道*在哪裏做這件事,因爲我不知道你在做什麼*現在*。 – millimoose