我以编程方式配置我的hibernate sessionfactory:
private static SessionFactory buildSessionFactory() {
// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration();
configuration.configure();
configuration.setProperty("hibernate.connection.url", myUrl);
configuration.setProperty("hibernate.connection.username", myUser);
configuration.setProperty("hibernate.connection.password", myPass);
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
return configuration.buildSessionFactory(serviceRegistry);
}
但问题是,当从dao使用hibernate操作时,这些属性只被加载。
protected void startOperation() {
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
}
因此,当我的应用程序启动时,hibernate.hbm2ddl.auto似乎不起作用。我可以以某种方式强制hibernate.hbm2ddl.auto在我的程序或任何其他解决方案中启动吗?
建议或其他选择,想法?
答案 0 :(得分:4)
您需要设置hibernate.hbm2ddl.auto或使用
configuration.setProperty("hibernate.hbm2ddl.auto", "create-drop");
使用 hibernate.properties 或 hibernate.cfg.xml 等配置文件是设置设置的首选方式。
答案 1 :(得分:0)
是。 new Configuration()
应加载hibernate.cfg.xml
的所有属性。
似乎您的SessionFactory
已配置为延迟初始化,仅在调用HibernateUtil.getSessionFactory()
时构建。
如果是控制台程序,请在main方法中简单调用SessionFactory.buildSessionFactory()
如果是Web应用程序,您可以使用ServletContextListener.contextInitialized(ServletContextEvent sce)或Spring强制在服务器启动期间执行SessionFactory.buildSessionFactory()
。