我使用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