我正在使用Hibernate租赁,每次用户登录时我都会将数据库更改为他的用户名(SQLite)。遗憾的是,有时数据库不存在,我需要创建它。
问题是我不知道如何在运行时在数据库中创建所有表。
通常Hibernete会为我创建db:
<property name="hibernate.hbm2ddl.auto">update</property>
答案 0 :(得分:4)
您是否尝试了值create
。
create的值将在sessionFactory创建时创建表,并保持原样。
create-drop的值将创建表,然后在关闭sessionFactory时删除它们。
那将是
<property name="hibernate.hbm2ddl.auto">create</property>
更多信息here和here
或者可能有dialect problem
答案 1 :(得分:3)
您可以在运行时通过在数据库连接URL中添加http://www.example.com:8000/beet.ogg
http://www.example.com:8000/mouthorgan.mp3
http://www.example.com:8000/live
参数来创建数据库。
有关详细信息,请查看SO Link!
答案 2 :(得分: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);
Javadocs在这里:http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/tool/hbm2ddl/SchemaExport.html
有关设置配置的选项,请参阅此处。 http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/cfg/Configuration.html
修改强> 我想一个必须添加的注释是让hibernate在生产环境中处理DB / SCHEMA / TABLE创建被认为是不好的做法。根据需要和可行性,可能更好的做法是为此保存准备好的SQL语句,甚至可以由数据库管理员手动执行。但由于我们都懒惰,我想这不会经常发生。 ; d